2010-11-29 2 views
4

У меня есть программа, которая создает ItemizedOverlay и карту. Все работает отлично при запуске.Как очистить/сбросить ItemizedOverlay в Android?

Когда вы закрываете и снова открываете приложение, я использую onRestart() для получения обновленной информации с моего сервера и обновления карты. Проблема в том, что на данный момент ItemizedOverlay по-прежнему содержит старые элементы, а затем переходит к добавлению новых данных в существующие данные.

Я ищу способ очистить ItemizedOverlay. Кажется, что не ItemizedOveraly.clear, или любая аналогичная функция.

Идеи о том, как я могу это сделать/почему это не очевидно?

ответ

13

Типичный пользовательский оверлей выглядит следующим образом. он инкапсулирует различные элементы OverlayItems, отображаемые на карте в списке.

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{ 

    private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

    public MyItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker));   
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 

    public void removeOverlay(OverlayItem overlay) { 
     mOverlays.remove(overlay); 
     populate(); 
    } 


    public void clear() { 
     mOverlays.clear(); 
     populate(); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 
} 

Методы могут быть подвержены, чтобы добавить/удалить отдельные overlayitems, но и удалить все overlayitems (прозрачный метод).

Удалить один overlayitem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.removeOverlay(overlay); 

Добавить один overlayItem

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.addOverlay(new OverlayItem(p, "title", "snippet")); 

Удалить все overlayItems

MyItemizedOverlay sitesOverlay = (MyItemizedOverlay) map.getOverlays().get(0); 
sitesOverlay.clear(); 
+7

Я сталкиваюсь с `ArrayIndexOutOfBoundsException`, даже вызывая` clear() `и` populate() `, при касании карты (местоположение удаленного элемента). Обходной путь вызывает `setLastFocusedIndex (-1)` перед `populate`, пожалуйста, найдите деталь в [этой статье] (http://bit.ly/ID45TU) – xinthink 2012-04-12 08:17:18

1

При использовании MapView вы создаете свою собственную ItemizedOverlay sublcass. Вы можете добавить метод clear(), если хотите.

+0

Ока y ... но что бы я поставил в методе clear()? Как очистить ItemizedOverlay? – Chris 2010-11-29 19:11:25