Associer un objet avec un marqueur (google map v2)
Dans mon application, j'ai des objets dont l'emplacement est affiché sur la carte à l'aide de marqueurs. Le problème est que la seule façon que j'ai trouvée pour gérer les clics de marqueur est
googleMap.setOnMarkerClickListener(new ... {
@Override
public void onMarkerClick(Marker marker) {
// how to get the object associated to marker???
}
})
En d'autres termes, j'obtiens L'objet Marker alors que la seule interface que j'ai me permet de définir juste MarkerOptions.
Un moyen d'associer un marqueur à un objet?
3 réponses
Vous pouvez associer un objet arbitraire en utilisant la méthodeMarker setTag ()
Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World"));
amarker.setTag(new SomeData());
Pour récupérer les données associées à marker, il vous suffit de le lire en utilisant son getTag () , puis de le convertir à son type d'origine.
SomeData adata = (SomeData) amarker.getTag();
Je pense que ce rappel n'a pas été très bien par L'équipe Android, mais, c'est ce que nous avons.
Chaque fois que vous appelez mMap.addMarker();
, il renvoie le marqueur généré. Vous pouvez ensuite utiliser une HashMap ou une autre structure de support de données pour vous en souvenir.
// Create the hash map on the beginning
WeakHashMap <Marker, Object> haspMap = new WeakHashMap <Marker, Object>();
// whenever adding your marker
Marker m = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World").icon(icon_bmp));
haspMap.put(m, your_data);
Une autre option serait de créer une carte dont les clés sont marker.getId() et la valeur est notre objet.
De cette façon, nous ne garderions pas une référence à un marqueur en mémoire, et n'aurions pas à nous soucier des marqueurs collectés.
Ici, vous pouvez voir plus de réponses.