2010-11-29 92 views
4

我有一個程序正在創建一個ItemizedOverlay和一張地圖。啓動時一切正常。如何清除/重置Android中的ItemizedOverlay?

當您關閉和重新打開應用程序時,我正在使用onRestart()從我的服務器獲取更新信息並更新地圖。問題在於,此時,ItemizedOverlay仍包含舊項目,然後繼續將新數據添加到現有數據。

我正在尋找一種方法來清除ItemizedOverlay。似乎沒有一個ItemizedOveraly.clear或任何類似的函數。

關於如何做到這一點的想法/爲什麼不明顯?

回答

13

一個典型的自定義覆蓋看起來像這樣。它將地圖上顯示的各種OverlayItem封裝在列表中。

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{ 

    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

    public MyItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker));   
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

    public void removeOverlay(OverlayItem overlay) { 
     mOverlays.remove(overlay); 
     populate(); 
    } 


    public void clear() { 
     mOverlays.clear(); 
     populate(); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 
} 

方法可以暴露添加/刪除個別覆蓋圖,但也可以刪除所有覆蓋圖(清除方法)。

刪除單個overlayitem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.removeOverlay(overlay); 

添加一個overlayItem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.addOverlay(new OverlayItem(p, "title", "snippet")); 

刪除所有overlayItems

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.clear(); 
+7

當觸摸地圖(被移除物品的位置)時,我遇到`ArrayIndexOutOfBoundsException`,甚至調用`clear()`和`populate()`。 解決方法是在`populate`之前調用`setLastFocusedIndex(-1)`,請在[本文]中找到詳細信息(http://bit.ly/ID45TU) – xinthink 2012-04-12 08:17:18

1

使用MapView時,您可以創建自己的ItemizedOverlay子圖層。如果需要,可以添加clear()方法。

+0

奧卡Ÿ但我會在clear()方法中放什麼?如何清空ItemizedOverlay? – Chris 2010-11-29 19:11:25