如何在多个MapActivities中使用单个MapView

时间:2012-01-04 19:11:33

标签: android android-mapview android-fragments mapactivity

我正在开发一个应用程序,在三个不同的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的想法。

我没有尝试使用多个进程,因为我相信我尝试实现的解决方案在资源上要轻得多。

非常感谢任何帮助!

1 个答案:

答案 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);
    }
}