Gra*_*ith 14 android android-maps android-fragments android-viewpager
背景
我成功地将新地图api v2.0添加到ViewPager并且地图加载正常.我正在使用FragmentViewPager.我遇到了麻烦,但是当我尝试添加标记时因为我无法获取Fragment by标签,因为我使用的ViewPager来自兼容性库并在XML中定义,这会"隐藏"我的标签.
问题
如何将带有标记的新Map v2加载SupportMapFragment到ViewPager使用a的标记中FragmentPagerAdapter.
我的尝试
因此,我认为可以通过将SupportMapFragment扩展为执行以下操作的新类来创建一个优雅的解决方案:
GoogleMapOptions和的新构造函数List<MarkerOptions>.这有效地调用了刚刚接受的现有构造函数,GoogleMapsOptions然后将我的标记列表存储在新类的私有属性中.GetMap()- 检查它是否为空,如果它没有将标记添加到我们之前加载到地图上的地图,最后返回它.我的想法是,我的扩展可以高度重用,并抽象出与一个地方相关的任何地图,并允许我的活动创建新的MapFragment newInstance(myGoogleMapOptions, myMarkers).
好的,这个问题.第1部分似乎工作正常但是在调试期间我无法调用重写的GetMap()方法.事实上,我已经尝试重写碎片拥有的大多数常用方法,但没有一个被调用.是否有一些奇怪的事情发生在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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ven*_*r85 24
只是尝试这样,它的工作原理.
public class MyMapFragment extends SupportMapFragment {
private List<MarkerOptions> mMarkers;
public static MyMapFragment create(GoogleMapOptions options, ArrayList<MarkerOptions> markers) {
MyMapFragment fragment = new MyMapFragment();
Bundle args = new Bundle();
args.putParcelable("MapOptions", options); //obtained by decompiling google-play-services.jar
args.putParcelableArrayList("markers", markers);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Hacky and ugly but it works
ArrayList<Parcelable> list = getArguments().getParcelableArrayList("markers");
mMarkers = new ArrayList<MarkerOptions>(list.size());
for (Parcelable parcelable : list) {
mMarkers.add((MarkerOptions) parcelable);
}
}
@Override
public void onResume() {
super.onResume();
GoogleMap mMap = super.getMap();
//add the markers
if (mMap != null) {
for (MarkerOptions marker : mMarkers) {
mMap.addMarker(marker);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9629 次 |
| 最近记录: |