2015-09-29 39 views
0

我試圖找到一種方法來正確實施getMapAsync()在我的代碼,我將不得不處理谷歌Marker很多。您可能知道getMapAsync()onMapReady中準備好此映射時會返回非空映射。谷歌地圖和getMapAsync

所以基本上我將不得不做所有關於onMapReady中標記的東西。問題是,在我的代碼的各個部分我打電話我的谷歌標記在onMapReady初始化與map.addMarker(new MarkerOptions())但我不知道這些標記是否已經初始化或沒有(以及我可以在onMapReady添加一個boolean知道我的Marker初始化但在這個布爾值爲false的情況下,我應該做什麼?對我的標記做什麼?)。

所以基本上我希望能夠得到相同的行爲,如同步getMap()方法在哪裏我一定會得到一個非空映射。因爲我很確定我無法在我的主線程中添加「服務員」(例如CountdownLatch),所以我無法找到一種方法來等待地圖準備就緒,然後再繼續執行主代碼中的其餘代碼線。謝謝

+0

明顯的解決方案從兩個地方調用「添加代碼」 ,在某些標記列表中存儲標記變量(字段)...如果地圖準備就緒添加標記並添加列表中的所有標記,清除列表......當然,添加一些線程競賽檢查 – Selvin

+0

'如果不是,則在某些列表中存儲標記標記變量(字段)' 標記實例用'map.addMarker(new MarkerOptions())'檢索,如果我想要一個Marker實例,'map'需要被初始化。 –

+0

嗯好吧,好吧...因此存儲MarkerOptions或其他數據創建所需的其他數據的列表...但是您獲得了一般概念?你需要像懸而未決的標記(或其創建的數據)來添加... – Selvin

回答

0

解決方案確實如@Selvin所述,操縱和存儲MarkerOptions變量。爲了反映MarkerOptions變量到我地圖改變我創建的方法等如下:

public void reloadMarkersOnTheMap() { 
    if (isMapInitialised) { 
     map.clear(); 
     map.addMarker(pickupMarker); 
     map.addMarker(dropOffMarker); 
    } 
} 

然後將溶液以清除和從/我MarkerOptions的修改後的值重新添加我MarkerGoogleMap變量。如果isMapInitialised == false那麼我的標記將被初始化爲onMapReady()