如何在Android中清除/重置ItemizedOverlay?

Chr*_*ris 4 android google-maps clear itemizedoverlay

我有一个程序正在创建ItemizedOverlay和一个地图.启动时一切正常.

当您关闭并重新打开应用程序时,我使用onRestart()从我的服务器获取更新信息并更新地图.问题是此时,ItemizedOverlay仍然包含旧项目,然后继续将新数据添加到现有数据.

我正在寻找一种清除ItemizedOverlay的方法.似乎没有ItemizedOveraly.clear或任何类似的功能.

关于如何做到这一点的想法/为什么不明显?

dde*_*ele 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

可以暴露方法来添加/删除单个overlayitems,还可以删除所有overlayitems(clear方法).

删除单个overlayitem

MyItemizedOverlay sitesOverlay =  (MyItemizedOverlay ) map.getOverlays().get(0);
sitesOverlay.removeOverlay(overlay);
Run Code Online (Sandbox Code Playgroud)

添加一个overlayItem

MyItemizedOverlay sitesOverlay =  (MyItemizedOverlay ) map.getOverlays().get(0);
sitesOverlay.addOverlay(new OverlayItem(p, "title", "snippet"));
Run Code Online (Sandbox Code Playgroud)

删除所有overlayItems

MyItemizedOverlay sitesOverlay =  (MyItemizedOverlay ) map.getOverlays().get(0);
sitesOverlay.clear();
Run Code Online (Sandbox Code Playgroud)

  • 我遇到`ArrayIndexOutOfBoundsException`,甚至在触摸地图(删除项目的位置)时调用`clear()`和`populate()`.解决方法是在`populate`之前调用`setLastFocusedIndex(-1)`,请在[本文]中找到详细信息(http://bit.ly/ID45TU) (7认同)