我正在开发一个应用程序,在三个不同的MapActivities上显示地图。
为了做到这一点,我在这三个FragmentActivities中重复使用了MapFragment,它使用Pete Doyle's port of the Android Compatibility package扩展了MapActivities。
此MapFragment中使用的MapView保留在Application Context。
为了避免“此视图已有父”错误,我在打开其他活动时从当前父级删除了该视图:
ViewGroup parentViewGroup = (ViewGroup) app.mapViewContainer.getParent();
if( null != parentViewGroup ) {
parentViewGroup.removeView(app.mapViewContainer);
}
这一切都运行良好,直到我按下手机的后退按钮并转到之前的MapActivity。此时,MapView全黑,因为我在更改活动时将其从父项中删除,后退按钮不会触发重新创建视图...
我知道这篇文章: How to use multiple MapActivities/MapViews per Android application/process
事实上,我有了从 Danny Remington - MacroSolve 给出的答案中重复使用MapView的想法。
我没有尝试使用多个进程,因为我相信我尝试实现的解决方案在资源上要轻得多。
非常感谢任何帮助!
答案 0 :(得分:1)
修正了我自己的问题...
当MapFragment正在恢复时,我只需要从片段和mapview的父级中删除所有视图,然后将mapview添加到片段中:
@Override
public void onResume() {
super.onResume();
resumed++;
if (resumed > 0) {
ViewGroup view = (ViewGroup) this.getView();
view.removeAllViews();
ViewGroup parentViewGroup = (ViewGroup) app.mapViewContainer.getParent();
if (parentViewGroup != null) {
parentViewGroup.removeAllViews();
}
view.addView(app.mapViewContainer);
}
}