2012-06-19 18 views
0

我想從我的地圖中刪除我的所有itemizedoverlay,但我做不到,我不知道爲什麼。 我讀過很多教程,並在所有這些有以下解決方案:安卓:刷新地圖,並清除所有itemizedoverlay

 itemizedoverlay.clear();    
     mMapView.invalidate(); 

但它不工作!

我想其中首先我做了(在onPreExecute())這樣做在的AsyncTask:

 itemizedoverlay.clear();    
     mMapView.invalidate(); 

然後我得到我所有的GeoPoint從我的服務器,我創建了一個myitemizedoverlay對象的列表(在doInBackground()),我把他們在地圖上像這樣(在onPostExecute()):

  for (int i = 0; i < myListOfOverlayItem.size(); i++) { 
       itemizedoverlay.addOverlay(myListOfOverlayItem.get(i)); 
      } 
      overlays.add(itemizedoverlay); 

爲什麼我的代碼不更新我的地圖嗎? : -/

這是明確的代碼:

public void clear(){ 
    this.m_overlays.clear(); 
    setLastFocusedIndex(-1); 
    populate(); 
} 

感謝

+0

嘗試遵循這個模式:在'doInBackground()'創建的覆蓋,在'onPostExecute()''執行明確的()',然後添加疊加,然後調用'invalidate'。如果'onPreExecute()'在** UI線程**或**後臺線程**上運行,請檢查文檔。如果它在後臺線程上運行,我認爲**使地圖視圖**無效是不安全的。 – JJD

回答

3

這裏嘗試

mMapView.getOverlays().clear(); 

更多信息/的javadoc:https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView

+0

如果我使用你的方法,地圖刷新擦除myLocationOverlay而不是其他itemizedoverlay。 =( – michoprogrammer

+0

啊......這是要發生的。保持一個參考到你的位置重疊,並在您的明確方法getOverlays後再次添加它()。明確的()調用 – petey

+0

我想並沒有什麼....所有的舊itemoverlays留在地圖... – michoprogrammer

0

你做覆蓋.clear()在你的程序開始和mMapView.invalidate()結束?

+0

我推出兩個功能在程序的開始。在異步任務的onPreExecute()中。 – michoprogrammer

+0

我注意到,你做itemizedoverlay.clear而不是overlays.clear,不應mMapView.invalidate做_after_你添加新的東西,以覆蓋?那麼,我自己正在努力處理地圖,所以我的評論可能不是很有用:) – perza