2010-11-29 91 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