2012-11-06 103 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:如果您發佈的代碼將很容易幫助您。

相關問題