2012-12-27 12 views
27

In meiner App habe ich einige Objekte, deren Standort mit Markern auf der Karte angezeigt wird. Das Problem ist, dass der einzige Weg, die ich gefunden habe Marker Klicks zu handhaben istVerknüpfen Sie ein Objekt mit Marker (google map v2)

googleMap.setOnMarkerClickListener(new ... { 
    @Override 
    public void onMarkerClick(Marker marker) { 
     // how to get the object associated to marker??? 
    } 
}) 

Mit anderen Worten, die ich auf das Marker-Objekt erhalten, während die einzige Schnittstelle, die ich habe mir nur Marker festlegen kann.

Gibt es eine Möglichkeit, Marker mit einem Objekt zu verknüpfen?

Antwort

24

Sie beliebiges Objekt zuordnen können durch die Verwendung Marker ‚s setTag() Methode

Marker amarker = mMap.addMarker(new MarkerOptions().position(lat, lng).title("Hello World")); 
amarker.setTag(new SomeData()); 

Daten mit Marker assoziiert abzurufen, lesen Sie es einfach seine getTag() verwenden und es dann in seine ursprüngliche Art gegossen.

SomeData adata = (SomeData) amarker.getTag(); 

More information

+0

Dies ist die richtige Lösung. Laut Dokumentation über Tag in Marker: "Ein Objekt, das dem Marker zugeordnet ist. Zum Beispiel kann das Objekt Daten darüber enthalten, was der Marker repräsentiert. Dies ist einfacher als das Speichern eines separaten Map ". – JDenais

+0

Richtige Lösung ab Play Services 9.4 – hibob

+0

Dies ist die richtige Lösung! –

54

Ich denke, dass dieser Rückruf vom Android-Team nicht sehr gründlich war, aber es ist, was wir haben.

Immer wenn Sie mMap.addMarker(); aufrufen, wird der generierte Marker zurückgegeben. Sie können dann eine HashMap oder eine andere Datenbehälterstruktur verwenden, um sich daran zu erinnern.

// 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); 
+8

I 'WeakHashMap' empfehlen, wenn so ein' Marker' Garbage Collection wird, wird auch die damit verbundenen 'WeakHashMap' Eintrag und' Object' Wert. Aber, leider, dies scheint zur Zeit die einzige Option zu sein. – CommonsWare

+1

macht für mich Sinn. Ich habe meine Antwort als WeakHashMap bearbeitet. Ist das in Ordnung? – Budius

+0

Das sieht gut aus. – CommonsWare

8

Eine andere Option wäre, eine Map zu erstellen, deren Schlüssel marker.getId() ist und der Wert ist unser Objekt.

Auf diese Weise würden wir keinen Verweis auf einen Marker im Speicher behalten und müssten uns keine Gedanken über die gesammelten Marker machen.

Hier können Sie sehen more answers.

Verwandte Themen