2010-11-29 47 views
4

J'ai un programme qui crée un ItemizedOverlay et une carte. Tout fonctionne bien au démarrage. Lorsque vous fermez et rouvrez l'application, j'utilise onRestart() pour obtenir des informations à jour sur mon serveur et mettre à jour la carte. Le problème est qu'à ce stade, ItemizedOverlay contient toujours les anciens éléments, puis procède à l'ajout des nouvelles données aux données existantes.Comment effacer/réinitialiser un ItemizedOverlay dans Android?

Je suis à la recherche d'un moyen de vider le ItemizedOverlay. Il ne semble pas être un ItemizedOveraly.clear, ou une fonction similaire. Des idées sur comment je peux faire ceci/pourquoi n'est-ce pas évident?

Répondre

13

il encapsule les différents OverlayItems affichés sur la carte dans une liste.

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(); 
    } 
} 

Les méthodes peuvent être exposés à ajouter/supprimer des overlayitems individuels, mais aussi supprimer tous les overlayitems (méthode claire).

Supprimer un seul overlayitem

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

Ajouter un overlayItem

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

Retirez tous overlayItems

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

Je rencontre 'ArrayIndexOutOfBoundsException', même appel' clear() 'et' populate() ', lorsque vous touchez la carte (l'emplacement de l'élément supprimé). La solution de contournement consiste à appeler 'setLastFocusedIndex (-1)' avant de 'populate', s'il vous plaît trouver des détails dans [cet article] (http://bit.ly/ID45TU) – xinthink

+0

@ddewaele Tout exemple ou exemple de lien pour celui-ci .. . – NagarjunaReddy

1

Vous créez votre propre sous-classe ItemizedOverlay lorsque vous utilisez un MapView. Vous pouvez ajouter une méthode clear() si vous le souhaitez. Une surimpression personnalisée typique ressemble à ceci:

+0

Oka y ... mais que ferais-je dans la méthode clear()? Comment puis-je vider le ItemizedOverlay? – Chris