现在我无法重用我的MapFragment.
我有Navigationarawer的MainActivity.其中一个片段是里面有GoogleMap片段的片段.当我在NavigationDrawer中切换片段时,他们重新创建自己.以前我使用非常简单的解决方案.我用过已经夸大的视图:
public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,final Bundle savedInstanceState) { super.onCreateVIEw(inflater,container,savedInstanceState); if (vIEw != null) { VIEwGroup parent = (VIEwGroup) vIEw.getParent(); if (parent != null) { parent.removeVIEw(vIEw); } return vIEw; } vIEw = inflater.inflate(R.layout.fragment_map,false); SupportMapFragment mapFragment = SupportMapFragment.newInstance(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.ID.container,mapFragment).commit(); mapFragment.getExtendedMapAsync(new OnMapReadyCallback() { public voID onMapReady(GoogleMap GoogleMap) { map = GoogleMap; setupMap(); } }); return vIEw;}
但现在它不起作用.此片段第二次打开时,地图不会显示.
我可以抛弃这个丑陋的代码
if (vIEw != null) { VIEwGroup parent = (VIEwGroup) vIEw.getParent(); if (parent != null) { parent.removeVIEw(vIEw); } return vIEw; }
并始终用内部重新创建视图.但是我有成千上万的标记(当然有很棒的聚类)并且需要很多时间来重新绘制它们.
我知道这不是扩展库的问题,谷歌地图有相同的行为.但也许你知道正确的决定?
解决方法 我们可以使用MapVIEw,而不是使用MapFragment,它也存在于androIDmapsextensions中.它可以重复使用.由于以编程方式添加MapVIEw,需要调用mapVIEw.onCreate(bundle)
private MapVIEw mapVIEw;public VIEw onCreateVIEw(LayoutInflater inflater,Bundle savedInstanceState) { super.onCreateVIEw(inflater,savedInstanceState); VIEw vIEw = inflater.inflate(R.layout.fragment_map,false); if (mapVIEw != null) { VIEwGroup parentVIEwGroup = (VIEwGroup) mapVIEw.getParent(); if (parentVIEwGroup != null) { parentVIEwGroup.removeVIEw(mapVIEw); } } else { mapVIEw = new MapVIEw(getActivity()); mapVIEw.onCreate(Bundle.EMPTY); //need if programmatically add } ((VIEwGroup)vIEw.findVIEwByID(R.ID.container)).addVIEw(mapVIEw); mapVIEw.getExtendedMapAsync(new OnMapReadyCallback() { public voID onMapReady(GoogleMap GoogleMap) { setUpMap(GoogleMap); } }); }
或者,如果我们不需要任何重用mapVIEw的设置
public VIEw onCreateVIEw(LayoutInflater inflater,false); boolean needSetupMap = true; if (mapVIEw != null) { VIEwGroup parentVIEwGroup = (VIEwGroup) mapVIEw.getParent(); if (parentVIEwGroup != null) { parentVIEwGroup.removeVIEw(mapVIEw); needSetupMap = false; } } else { mapVIEw = new MapVIEw(getActivity()); mapVIEw.onCreate(Bundle.EMPTY); } ((VIEwGroup)vIEw.findVIEwByID(R.ID.container)).addVIEw(mapVIEw); if (needSetupMap) { mapVIEw.getExtendedMapAsync(new OnMapReadyCallback() { public voID onMapReady(GoogleMap GoogleMap) { setUpMap(GoogleMap); } }); }}总结
以上是内存溢出为你收集整理的android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment全部内容,希望文章能够帮你解决android-maps-v2 – 如何在其他Fragment中重用SupportMapFragment所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)