3

我有 2 个活动,其中包含MapView. 在活动 A 中,地图视图的大小与活动 B 中的大小不同。调用层次结构是ActivityA -> ActivityB。当我从ActivityB 返回到 A 时,地图的一半是黑色的(只有 Google 标志保留在左角)。移动地图没有效果(地图底部仍然是黑色)只有放大/缩小才能使地图看起来正确。

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

4

3 回答 3

3

问题是 Google Maps API 不会让您同时拥有多个MapView活动实例。当您从A打开ActivityB 时, A 仍然留在堆栈中并且它仍在工作。因此,当您在B 中实例化另一个时,旧的开始表现异常。有几种解决方法,但没有一种可以被认为是稳定的,因此您应该使用销毁和重新创建A 的解决方案,或者重新设计您的应用程序,以便仅使用其中一种。希望这可以帮助。ActivityActivityMapViewMapViewActivityActivityActivitiesMapView

于 2012-11-06T18:47:32.503 回答
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。

于 2012-11-06T19:02:37.523 回答
0

最可能的原因是您实例化了 maponCreate方法,所以第一次地图显示正常,但是当您回来时,onCreate没有调用该方法并且您的地图没有启动。将地图初始化移动到onStart方法中。

也许活动生命周期文档可以提供帮助

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

于 2012-11-06T18:56:26.377 回答