两个活动之间的不同地图视图大小

时间:2012-11-06 18:30:12

标签: android android-mapview

我有2个包含MapView的活动。 在活动中,mapview的大小与活动B不同。 呼叫hirarchy是Activity A - > Activity B. 当我从Activity B返回到A时,地图的一半是黑色的(只有Google标志留在左角)。 移动地图无效(地图底部仍为黑色)只有放大/缩小才能使地图正常显示。

在android清单中我使用不同的ID, 我在invalidate()方法中尝试了onResume() mapview, 我试图在findViewById(android.R.id.content).requestLayout()中对整个布局调用onResume(),但效果不佳。 唯一的解决方案是finish()活动onPause()并在活动B的键回上再次创建它。 还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

问题在于,Google Maps API不会让您同时拥有多个MapView个实例。当您从Activity A打开Activity B时,Activity A仍然处于堆叠状态且其MapView仍然有效。因此,当您在MapView B中实例化另一个Activity时,较旧的一个开始出现异常行为。有几种解决方法,但没有一种可以被认为是稳定的,因此您应该使用破坏和重新创建Activity A的解决方案,或者重新设计您的应用程序,以便只有ActivitiesMapView使用{{} 1}}。希望这会有所帮助。

答案 1 :(得分:2)

您将在LogCat中看到活动正在重复使用未映射的地图:

MapActivity: Recycling map object

要恢复地图中的旧设置,请对两个活动使用onResume方法:

@Override
protected void onResume() {
    super.onResume();

    MapController mapController = mMapView.getController();

    mapController.setCenter(mCenterPoint);
    mapController.setZoom(mZoomLevel);
    mapController.animateTo(mCenterPoint);
}

因为onCreate只会被调用一次,后退按钮或新的Intent将(​​希望)重用堆栈上的实际Intent。

答案 2 :(得分:0)

最有可能导致你实例化地图onCreate方法,所以第一次地图显示正常,但是当你回来时,onCreate方法没有被调用,你的地图也没有没有发起。 将地图初始化移至onStart方法。

也许the Activity lifecycle documentation可以提供帮助

PS:如果你发布你的代码将很容易帮助你。