4

ItemizedOverlay とマップを作成するプログラムがあります。起動時にすべて正常に動作します。

アプリを閉じて再度開くと、onRestart() を使用してサーバーから更新された情報を取得し、マップを更新します。問題は、この時点で ItemizedOverlay にまだ古い項目が含まれており、その後、新しいデータを既存のデータに追加することです。

ItemizedOverlay をクリアする方法を探しています。ItemizedOveraly.clear や同様の機能はないようです。

これを行う方法についてのアイデア/なぜそれが明らかではないのですか?

4

2 に答える 2

13

典型的なカスタム オーバーレイは次のようになります。マップ上に表示されるさまざまな OverlayItems をリストにカプセル化します。

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

メソッドは、個々のオーバーレイ項目を追加/削除するために公開できますが、すべてのオーバーレイ項目を削除することもできます (clear メソッド)。

単一のオーバーレイアイテムを削除する

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();
于 2010-11-29T19:49:44.933 に答える
1

MapView を使用する場合は、独自の ItemizedOverlay サブクラスを作成します。clear()必要に応じてメソッドを追加できます。

于 2010-11-29T19:01:29.563 に答える