【发布时间】:2015-01-30 00:14:24
【问题描述】:
我让 Maps V2 使用 FragmentActivity 和 SupportMapFragment
但现在我试图让它工作而不是使用上面的,而是使用
MapView。地图文档似乎说你可以做到这一点。
应用程序运行,但我只是黑屏,没有地图。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.gms.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Java 文件:
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.LayoutInflater;
import android.content.Context;
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
private GoogleMap googleMap;
private View view;
private MapView mapView;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
context = (Context)getApplication();
LayoutInflater inflater =(LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.activity_main, null);
mapView = (MapView)view.findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
initilizeMap();
}
catch (Exception e)
{
}
}
private void initilizeMap()
{
if ( googleMap == null )
{
mapView.getMapAsync(this);
}
}
@Override
protected void onResume()
{
mapView.onResume();
super.onResume();
initilizeMap();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
}
我的 AndroidManifest.xml 与我使用 Fragments 时一样 所以我知道钥匙和其他一切都在工作。
我删除了支持 v4 .jar,因为如果 Fragments 我不需要它 不使用的地方。
我尝试定义其他方法,例如 onDestory(),
因为它似乎希望所有人都进行MapView 转发,
但它抱怨它们,所以我删除了它们。
我尝试在onMapReady() 中做更多的事情,但没有
似乎做得很好。
在 V2 中使用 MapView 的例子很少。
是否可以在不使用 Fragment 的情况下显示地图 并使用 MapView?
如果是这样,我需要做什么才能让某些东西出现?
更新 1:
我又尝试了几件事,但仍然没有运气。
我添加了所有转发的public final void onDestroy() 等。
这次它没有抱怨,而且,在 Logcat 中,它看起来仍在尝试在 support v4 .jar 中引用 Fragment,所以我什至添加了 support v4 .jar,
用--subprojects重新做了一个android更新项目,但我还是黑了
屏幕,但它确实有它的标题。
是的,是同一个项目,我只是重命名了主项目名称, 包名是一样的,Key和工作时一样。
我还删除了带有地图的顶部导入。* 并添加了个人 它需要的,它做了一个干净的构建。
更新 2:
我终于在不使用支持 v4 .jar 的情况下让它工作了!
和任何片段。
我在播放服务示例中找到了示例源RawMapViewDemo.java,将应用程序更改为基本上使用它,用--subprojects重新运行'android update project',它工作了!!
这是完整的来源,希望它可以帮助某人。
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
// Google Map
private GoogleMap googleMap;
private View view;
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView)findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
protected void onResume()
{
super.onResume();
mapView.onResume();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
@Override
public final void onDestroy()
{
mapView.onDestroy();
super.onDestroy();
}
@Override
public final void onLowMemory()
{
mapView.onLowMemory();
super.onLowMemory();
}
@Override
public final void onPause()
{
mapView.onPause();
super.onPause();
}
}
【问题讨论】:
-
logcat 中有什么东西吗?使用与工作时相同的调试密钥进行签名?
-
您的解决方案的更新将更适合作为答案发布。
-
谢谢,我在你的问题中得到了我的解决方案。这一行我缺少 mapView.getMapAsync(this);
标签: android google-maps android-mapview