我有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的键回上再次创建它。
还有其他方法可以解决这个问题吗?
答案 0 :(得分:3)
问题在于,Google Maps API不会让您同时拥有多个MapView
个实例。当您从Activity
A打开Activity
B时,Activity
A仍然处于堆叠状态且其MapView
仍然有效。因此,当您在MapView
B中实例化另一个Activity
时,较旧的一个开始出现异常行为。有几种解决方法,但没有一种可以被认为是稳定的,因此您应该使用破坏和重新创建Activity
A的解决方案,或者重新设计您的应用程序,以便只有Activities
个MapView
使用{{} 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
方法。