Google Maps API v2 自定义 MapFragment + SimpleFragment
Posted
技术标签:
【中文标题】Google Maps API v2 自定义 MapFragment + SimpleFragment【英文标题】:Google Maps API v2 Custom MapFragment + SimpleFragment 【发布时间】:2013-01-05 16:10:38 【问题描述】:我需要创建一个简单的应用程序,其中包含 1.自定义MapFragment,可以显示当前位置(LocationListener?),两个标记等。 2. 简单的空片段。
应用不得使用 support v4 (sdk 11+) / FragmentActivity。
空片段。
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@android:color/black" >
</RelativeLayout>
类:
public class FirstFragment extends Fragment
public FirstFragment()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.first_fragment, container, false);
return view;
地图片段(尝试使其成为单例)。
XML:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_
android:layout_
class="com.google.android.gms.maps.MapFragment"/>
类
public class ThirdMapFragment extends MapFragment
public static MapFragment instance;
@Override
public View onCreateView(LayoutInflater arg0, ViewGroup arg1, Bundle arg2)
View view;
view = arg0.inflate(R.layout.map_fragment, arg1, false);
return view;
public static MapFragment getInstance()
if (instance == null)
instance = newInstance();
// NullPointerException in getMap() ???
// instance.getMap().addMarker(new MarkerOptions().position(new LatLng(41.1, 39)));
return instance;
@Override
public void onCreate(Bundle arg0)
super.onCreate(arg0);
主要活动:
public class ActivityMain extends Activity implements OnClickListener
FragmentManager fragmentManager;
FragmentTransaction transaction;
FirstFragment firstFragment;
MapFragment mapFragment;
// Buttons
Button b4;
int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fragmentManager = getFragmentManager();
transaction = fragmentManager.beginTransaction();
b4 = (Button) findViewById(R.id.button4);
b1.setOnClickListener(this);
firstFragment = new FirstFragment();
mapFragment = ThirdMapFragment.getInstance();
@Override
public boolean onCreateOptionsMenu(Menu menu)
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
@Override
public void onClick(View v)
makeTransaction(v.getId());
private void makeTransaction(int id)
i++;
transaction = fragmentManager.beginTransaction();
if (i == 1)
transaction.replace(R.id.relativeLayout, firstFragment).commit();
else if (i == 2)
transaction.replace(R.id.relativeLayout, secondFragment).commit();
else
transaction.replace(R.id.relativeLayout, mapFragment).commit();
i = 0;
R.id.relativeLayout - main.xml 中的布局
但我没有看到地图(带有缩放按钮的空白屏幕)以及如何制作 LocationListener?谢谢。
【问题讨论】:
【参考方案1】:如果您使用支持库,则必须使用 SupportMapFragment 类,而不是 MapFragment 用于地图片段。您的活动应该是一个 FragmentActivity 以支持库。以及片段管理器。你必须getSupportFragmentManager()。
看看这段代码:
import com.google.android.gms.common.GooglePlayServicesUtil;
import android.os.Bundle;
import com.google.android.gms.maps.*;
public class Map extends android.support.v4.app.FragmentActivity
private GoogleMap map;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()) == 0)
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
如果您在进行这些更改后仍然看不到地图。检查您的 API 控制台,您已打开 Google Map ANDROID API V2,而不仅仅是可能导致与您描述的结果相同的 Google Map API V2。
【讨论】:
不应该异步设置地图加上getMapAsync(this)并实现onMapReady? 我从未使用过此选项,而且我使用 Maps API 已经有一段时间了。【参考方案2】:视图尚未创建,这就是为什么 getMap() 返回 null,地图不存在,将代码放入 onResume
【讨论】:
【参考方案3】:放入manifest,android的key? 例如:
<application
android:icon="@drawable/android"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyB2s6isdfsghDfgdfdfgDFGDG-yi4-aAYUma0Owc"/>
https://developers.google.com/maps/documentation/android/start
【讨论】:
是的。还有权限、以上是关于Google Maps API v2 自定义 MapFragment + SimpleFragment的主要内容,如果未能解决你的问题,请参考以下文章
居中位图标记(Google Maps Android API v2)
将来自 url 的图像添加到自定义 InfoWindow google maps v2
Android Maps Library V2 缩放控件自定义位置