ItemizedOverylay
Nexus One の Google マップ (Android 2.1) でダイナミック (以下のコードを参照してください) を作成しようとしています。
私のActivity
(MapActivityを拡張する)では、ネットワークからデータを受信するデータスレッドを作成しています。「ハンドラー」は、受信スレッドからマップ アクティビティにデータを伝達するために使用されます。このデータには、地図に重ねたいマーカーの位置 (緯度、経度) が含まれています。各マーカーの位置は動的です (つまり、ネットワークから新しいデータを受信するたびに変化します)。 メソッドはハンドラーのrefreshItems(ArrayList<OverlayItem> newItems)
内部で呼び出されます。handleMessage()
渡される ArrayList には約 11 個のマーカーがあります。refreshItems
地図上に重ねられたマーカーが見えます。ただし、次の 2 つの問題があります。
古いマーカーはマップから削除されません。しばらくすると、マーカーの跡が見えます。
マップはタッチ コマンドに反応しません。地図を移動したり、ズームインまたはズームアウトしたりできません。しばらくすると、アプリが応答していないというシステム警告 (待機/終了?) メッセージが表示されます。
ここで何が問題なのですか?
ありがとう。
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> overlayItems;
public CoTItemizedOverlay(Drawable defaultMarker) {
super(boundCenter(defaultMarker));
overlayItems = new ArrayList<OverlayItem>();
populate();
}
public void addNewItem(GeoPoint location, String markerText, String snippet) {
overlayItems.add(new OverlayItem(location, markerText, snippet));
populate();
}
public void removeItem(int index) {
overlayItems.remove(index);
populate();
}
public void refreshItems(ArrayList<OverlayItem> newItems) {
// remove all existing items
for (int i = 0; i < cotoverlayItems.size(); i++) {
overlayItems.remove(i);
}
// copy all the items
if (newItems != null && cotoverlayItems.size() == 0) {
overlayItems.addAll(newItems);
}
populate();
}
@Override
protected OverlayItem createItem(int index) {
return overlayItems.get(index);
}
@Override
public int size() {
return overlayItems.size();
}
}