Dans mon application, certains objets ont leur emplacement affiché sur la carte à l'aide de marqueurs. Le problème est que le seul moyen que j'ai trouvé pour gérer les clics sur les marqueurs 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 tandis que la seule interface dont je dispose me permet de définir uniquement MarkerOptions.
Est-il possible d'associer Marker à un objet?
Vous pouvez associer un objet arbitraire en utilisant la méthode MarkersetTag ()
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 au marqueur, il vous suffit de les lire à l'aide de son getTag () , puis de les convertir en leur type d'origine.
SomeData adata = (SomeData) amarker.getTag();
Je pense que ce rappel n'a pas été très approfondi 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 un HashMap ou une autre structure de stockage 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 de référence à un marqueur en mémoire et n'aurions pas à nous soucier des marqueurs récupérés.
Ici vous pouvez voir plus de réponses .