0

地図上にポイントを表示するアプリがあります。現在のユーザーには3つのマップオーバーレイ(1)があります。(2)ユーザーの友人/連絡先。(3)他の人のために。地図に表示するものを選択できるようにしようとしています。目標は、全員(ユーザー、友達など)を表示できるようにするか、マップをフィルター処理して友達/連絡先だけを表示できるようにすることです。

さまざまなオーバーレイをマップにうまく追加できます。問題はオーバーレイを削除することです。

ここでアプローチを試しました-アクティビティを更新する方法は?マップビューの更新が失敗します。これは、次のコードを使用してインデックスでアイテムを削除することを提案します。

private void showFriends(){

mapOverlays = mapView.getOverlays();
int j = othersMapOverlay.size();
for(int i = friendsMapOverlay.size; i < j; i++){
    mapOverlays.remove(i);
}
mapView.invalidate();
} 

ここでの私の戦略は、すべてのオーバーレイのリストを作成することでした-mapOverlays次に、forループを使用して、最初のオーバーレイの終わりであるfriendsMapOverlayから開始し、2番目のマップオーバーレイの終わりであるothersMapOverlayに到達するまで削除します。

それはうまくいきませんでした。

また、両方を使用してリストオブジェクトを削除しようとしました

mapOverlays.remove(othersMapOverlay);

また

mapView.getOverlays().remove(othersMapOverlay);

しかし、これらのどちらもトリックを行いません。これを修正する方法はありますか?

4

1 に答える 1

0

以下を使用して終了しました。オーバーレイを実際に隠したり削除したりするのではなく、クリアして再描画するだけです。これは、私がやりたいことよりも効率的である必要があります。つまり、そこにあるものを削除するだけですが、機能します。. . 今のところ。

private void showEveryone(){

    mapOverlays = mapView.getOverlays();
    mapOverlays.clear();
    mapView.invalidate();
    JSONArray friends = buildFriendList();
    JSONArray others = buildOthersList();
    getUserDataForMap(friends, "friends");
    getUserDataForMap(others, "others");

}
于 2012-12-14T22:58:48.190 に答える