2010-01-16 5 views
2

Je voudrais faire une superposition de carte Google avec des broches modifiables. Un moyen facile de visualiser ce serait de penser à une superposition en temps quasi réel, où les broches changent constamment d'emplacement.Comment faire un objet modifiable ItemizedOverlay

Cependant, je n'arrive pas à penser à un moyen sûr de le faire avec le ItemizedOverlay. Le problème semble être l'appel à peupler - Si size() est appelée par certaines threads de mappages, puis que mes données changent, le résultat lorsque les appels de maps appelle getItem() peut être une IndexOutOfBoundsException.

Quelqu'un peut-il penser à une meilleure solution que de surcharger et peupler super.populate dans un bloc synchronisé?

Peut-être que je pourrais avoir plus de chance en utilisant une superposition normale? Le Détaché semble exister pour gérer les données pour vous, peut-être que je fais une erreur fondamentale en l'utilisant?

Merci pour toute aide, mon cerveau me fait mal!

Hamy

+0

Je semble avoir des difficultés à ajouter plusieurs éléments de superposition à la vue de la carte . Je déclare ma propre classe ItemizedOverlay (à peu près la même que dans le tutoriel MapView sur le site de développement) mais je ne vois que le premier marqueur ajouté. Une description plus détaillée du problème est sur http://www.anddev.org/multiple_overlay_items-t12171.html Quelqu'un peut-il m'aider avec cela? Merci – Bostjan

Répondre

3

comme mentionné dans this article

Vous devez appeler, après l'ajout ou la suppression d'un élément de la liste.

setLastFocusedIndex (-1);

populate();

Exemple:

@Override 
protected OverlayItem createItem(int i) { 
    return overlays.get(i); 
} 
protected void removeOverlay(OverlayItem o){ 
    overlays.remove(o); 
    setLastFocusedIndex(-1); 
    populate(); 
} 
@Override 
public int size() { 
    return overlays.size(); 
} 
public void addOverlay(OverlayItem o){ 
    overlays.add(o); 
    setLastFocusedIndex(-1); 
    populate(); 
} 
0

J'ai eu un problème similaire et résolu par exclus mutuellement (oui ... ce qui les rend synchronisées) la méthode taille et la méthode qui mise à jour (ajouter/modifier) ​​les En fait, le premier a été appelé bye le thread GUI tandis que le second est dans un asynchrone, il est donc possible qu'ils sont appelés de manière asynchrone

Questions connexes