4

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

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

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

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

4

2 回答 2

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();
    }
}

方法可以公开添加/删除单个覆盖项,也可以删除所有覆盖项(清除方法)。

删除单个覆盖项

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"));

删除所有覆盖项

MyItemizedOverlay sitesOverlay =  (MyItemizedOverlay ) map.getOverlays().get(0);
sitesOverlay.clear();
于 2010-11-29T19:49:44.933 回答
1

使用 MapView 时,您可以创建自己的 ItemizedOverlay 子类。如果需要,您可以添加clear()方法。

于 2010-11-29T19:01:29.563 回答