2012-11-06 42 views
3

我有2个活动包含MapView。 在活动一个mapview有不同的大小,然后在活动B. 电话hirarchy是Activity A - >Activity乙 当我从Activity B返回到A地图的一半是黑色的(只有谷歌标志仍然在左边角)。 移动地图没有效果(地图底部仍然是黑色)只能放大/缩小地图看起来不错。2个活动之间的不同地图视图尺寸

在Android清单我用不同的ID, 我已经试过invalidate()的MapView在onResume()方法, 我试着也呼吁findViewById(android.R.id.content).requestLayout()在整个布局中onResume()没有效果。 唯一的解决方案是finish()活动onPause()并在活动B中的keyback上再次创建它。 有没有其他解决方法?

+0

祝贺你的问题在SO博客文章中有“特色”:) http://blog.stackoverflow.com/2012/11/get-rid-of-ads-you-dont-like-and-encourage- ads-you-do-like /?cb = 1 – Carlos

回答

2

你将在logcat中看到的活动重用undelaying地图:

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。

+0

这不正是我一直在寻找的,但在@Egor解释之后,您的解决方案是:将这项工作作为“解决方法”之一。谢谢 – balu

+0

它适合你吗?我将MapView和MapController的所有初始化都移动到了onResume(),但是我仍然有这种奇怪的行为(尽管在我的例子中,一半的地图是灰色的,而不是黑色的:P) –

+0

地图第一次显示正确,在打电话给第二个之前? – rgrocha

3

问题是Google Maps API不会让您在同一时间激活MapView的多个实例。当您从Activity A开始Activity B,Activity A仍然保持堆栈并且其MapView仍在工作。因此,当您在Activity B中实例化另一个MapView时,较旧的一个开始表现异常。有几种解决方法,但没有一个可以被认为是稳定的,所以你应该用你的解决方案去销毁并重新创建Activity A,或者重新设计你的应用程序,使得你的Activities中只有一个使用MapView。希望这可以帮助。

+0

感谢您的解释 – balu

+0

@balu,不客气! – Egor

0

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

也许the Activity lifecycle documentation可以帮助

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

相关问题