web-dev-qa-db-fra.com

Associer un objet à Marker (google map v2)

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?

31
leshka

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

Plus d'informations

31
Zamrony P. Juhara

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);
54
Budius

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 .

8
Sanete