背景
我已经成功地将新地图 api v2.0 添加到 ViewPager 并且地图加载正常。我正在使用 FragmentViewPager。但是,当我尝试添加标记时遇到了麻烦,因为我无法按标签获取片段,因为我使用的 ViewPager 来自兼容性库并在 XML 中定义,这对我“隐藏”了标签。
问题
如何将带有标记的新 Map v2 加载SupportMapFragment
到ViewPager
使用FragmentPagerAdapter
.
我的尝试
因此,在我的想法中,我认为可以通过将 SupportMapFragment 扩展为执行以下操作的新类来创建一个优雅的解决方案:
GoogleMapOptions
添加一个采用and的新构造函数List<MarkerOptions>
。这有效地调用了现有的构造函数,该构造函数GoogleMapsOptions
将我的标记列表存储在新类的私有属性中。- 覆盖
GetMap()
- 检查它是否为空,如果不是,将我们之前加载到地图上的标记添加到地图上,最后返回它。
我的想法是,我的扩展可以高度重用,并抽象出与一个地方相关的任何地图,并允许我的活动通过newInstance(myGoogleMapOptions, myMarkers)
.
好的,所以问题。第 1 部分似乎工作正常,但是在调试期间我无法调用重写的 GetMap() 方法。事实上,我已经尝试过覆盖 Fragment 拥有的大多数常用方法,但它们都没有被调用。SupportMapFragmemt 是否发生了一些奇怪的事情,我试图找到它的来源,但无济于事。
更新
我意识到为什么我没有调用我的重写方法。这是因为我返回的是标准SupportMapFragment
而不是MyMapFragment
. 也就是说,我不能从静态方法调用 super,也不能毫无例外地从基类转换为派生类。
编辑 这里是类
public class MyMapFragment extends SupportMapFragment {
private static List<MarkerOptions> mMarkers;
public static SupportMapFragment newInstance(GoogleMapOptions options, List<MarkerOptions> markers)
{
SupportMapFragment fragment = newInstance(options);
mMarkers = markers;
return fragment;
}
//have tried Overriding several methods including getMap()...
@Override
public void onResume ()
{
GoogleMap mMap = super.getMap();
//add the markers
if(mMap != null)
{
for(MarkerOptions marker : mMarkers)
{
mMap.addMarker(marker);
}
}
}
}