0

新しく作成された OverlayItem のデータが、マップに既に表示されている OverlayItems のリストに既に存在するかどうかを確認する必要があります。OverlayItem のデータが既に存在するかどうかを確認するコードを作成しましたが、エラーが発生しています。Overlay から OverlayItem を抽出するにはどうすればよいですか?

私の現在のコードは次のようなものです:

//where mapOverlays = mapView.getOverlays() and overlayItem is the newly created overlayItem
public boolean isExisting(List<Overlays> mapOverlays, OverlayItem overlayItem)
{
    ItemizedOverlay overlay;
    OverlayItem itemToCompare;

    for(int i = 0; i < mapOverlays.size(); i++)
    {
        overlay = (ItemizedOverlay)mapOverlays; //I am getting an error here: java.util.Collections$SynchronizedRandomAccessList (from e.getMessage()). The stack trace does not contain any specific exception but only the trace of the error pointing to this line.
        existingOverlayItem = overlay.getItem(i);

        if(itemToCompare.getPoint().equals(overlayItem.getPoint())
            && itemToCompare.getSnippet().equals(overlayItem.getSnippet())
            && itemToCompare.getTitle().equals(overlayItem.getTitle()))
            return true; //if all data are the same
    }

    return false;
}
4

3 に答える 3

0

MapOverlayはわかりませんが、ListをMapOverlayに入れることはおそらくできません。

于 2012-02-10T09:59:35.757 に答える
0

私の質問に答えてくれてありがとう。mapOverlays を間違ったクラスにキャストしているため、問題が発生することがわかりました。

また、mapOverlays から OverlayItem を抽出する (方法がわからない) 代わりに、addOverlay(OverlayItem overlayItem) 内で検証を行っているだけです。itemizedOverlay の値を常に再初期化しているため、以前はこれを行うことができませんでした。そのため、itemizedOverlay は古い値を保持していないため、新しく追加された OverlayItem を古いものと比較することはできません。私がしたことは、itemizedOverlay を常に再初期化する代わりに、常に mapView.getOverlays().clear() に相当する mapOverlays をクリアすることです。

于 2012-02-13T09:20:00.587 に答える
0

そのコードは少し奇妙に見えます。itemToCompare はどこに来るのですか? どこにも宣言されていません。itemToCompare が overlayItem と同じクラスである場合、すべてのパラメーターを比較する代わりに、クラスで equals をオーバーライドして使用してみませんか?

さらに良いことに、クラスで equals をオーバーライドすると、次へのアクセスが許可されます。

mapOverlays.contains(overlayItem); 

したがって、 isExisting メソッド全体が上記の呼び出しに置き換えられます。equals の仕組みの詳細については、こちらを参照してください

于 2012-02-10T10:15:36.637 に答える