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?

31
demandé sur leshka 2012-12-27 15:43:21

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

Plus d'informations

29
répondu Zamrony P. Juhara 2016-08-24 11:51:21

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);
55
répondu Budius 2012-12-27 12:28:12

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.

8
répondu Sanete 2017-05-23 11:54:44