2

変更可能なピンを使用して Google マップ オーバーレイを作成したいと考えています。これを視覚化する簡単な方法は、ピンの位置が絶えず変化するほぼリアルタイムのオーバーレイを考えることです。

ただし、 ItemizedOverlayでこれを行う安全な方法は考えられないようです。問題は populate の呼び出しにあるようです - size() が一部のマップ スレッドによって呼び出され、その後データが変更された場合、マップ呼び出しが getItem() にアクセスしたときの結果は IndexOutOfBoundsException になる可能性があります。

populate をオーバーロードして super.populate を同期ブロックにラップするよりも良い解決策を考えられる人はいますか?

おそらく、通常のオーバーレイを使用して運が良くなるでしょうか? 項目化されたものはデータを管理するために存在しているようですが、それを使用することで根本的な間違いを犯している可能性がありますか?

助けてくれてありがとう、私の脳は痛いです!

ハミー

4

2 に答える 2

3

この記事で述べたように

リストにアイテムを追加または削除した後、次を呼び出す必要があります。

setLastFocusedIndex(-1);

populate();

例:

@Override
protected OverlayItem createItem(int i) {
    return overlays.get(i);
}
protected void removeOverlay(OverlayItem o){
    overlays.remove(o);
    setLastFocusedIndex(-1);
    populate();
}
@Override
public int size() {
    return overlays.size();
}
public void addOverlay(OverlayItem o){
    overlays.add(o);
    setLastFocusedIndex(-1);
    populate();
}
于 2010-08-11T15:53:16.263 に答える
0

私は同様の問題を抱えていて、メソッドサイズとピンを更新(追加/変更)するメソッドを相互に除外する(はい...それらを同期させる)ことで解決しました...実際、最初のものはGUIスレッドからさようならと呼ばれました2番目は非同期ワーカーにあるため、非同期で呼び出される可能性があります

于 2011-01-03T13:49:08.237 に答える