Я пытаюсь создать динамический ItemizedOverylay
(см. Код ниже) в Картах Google (Android 2.1) на Nexus One.
В моем Activity
(который расширяет MapActivity) я создаю поток данных, который получает данные из сети. «Обработчик» используется для передачи данных из принимающего потока для отображения активности. Эти данные содержат местоположения (широта, долгота) маркеров, которые я хочу наложить на мою карту. Расположение каждого маркера является динамическим (то есть оно меняется каждый раз, когда я получаю новые данные из сети.) Метод refreshItems(ArrayList<OverlayItem> newItems)
вызывается внутри handleMessage()
обработчика. В ArrayList есть около 11 маркеров, которые передаются в refreshItems
Я вижу наложенные на карту маркеры. Однако у меня есть две проблемы:
Старые маркеры не удаляются с карты. Через некоторое время я вижу след маркеров.
Карта не реагирует ни на какие сенсорные команды. Я не могу переместить карту или увеличить или уменьшить масштаб. Через некоторое время я вижу системное предупреждение о том, что мое приложение не отвечает (ждать / закрыть?).
Есть идеи, что здесь не так?
Спасибо.
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();
}
}