2016-04-27 5 views
3

Ich arbeite mit Markern in einem Cluster (Google Maps), ich habe kein Problem, ein Info-Fenster beim Aufruf der Onclick-Methode zu zeigen. Das Problem ist, dass ich nicht finden kann, wie man die Methode showInfoWindow() verwendet, wie ich auf einem Marker die Info ohne Klick zu öffnen.Wie kann ich showinfowindow() in einem Marker im Cluster-Manager aufrufen?

Wenn ich einen Marker verwenden

marker = map.addMarker(new MarkerOptions() 
        .position(position) 
        .snippet(info)); 

dann nenne ich

marker.showInfoWindow(); 

, wie ich das gleiche mit einem Marker tun können (ClusterItem), die innerhalb des Cluster-Manager auf der Karte ist?

MarkCluster cluster = new MarkCluster(Lat, Lon, info); 
mClusterManager.addItem(cluster); 

Es ist die Markierung, die ich infowindow enter image description here

+0

Fragen Sie, wie Sie einen Verweis auf einen Marker erhalten, der vom ClusterRenderer zu einer Karte hinzugefügt wurde? (d. h., Sie erhalten einen Verweis auf einen Marker, der hinzugefügt wurde, nachdem Sie einen Cluster vergrößert haben?) –

+0

Ja, wenn ich die Referenz erhalte, kann ich das Infofenster aufrufen. Ich habe gelesen und gesucht, kann aber den Weg nicht finden. – robertDraven

+0

Sollte in der Lage sein, 'mClusterManager.getMarkerCollection(). GetMarkers()' zu verwenden, aber Sie müssen durch die Liste gehen, um die Marker-Referenz zu erhalten, nach der Sie suchen. –

Antwort

5

dieses Versuchen zeigen wollen seine, was ich getan habe Referenzen zu bekommen Marker abzubilden, wenn Clustering:

Wenn Sie eine ClusterManager es schaffen erstellt und verwendet immer eine Instanz von DefaultClusterRenderer, wenn Sie die .setRenderer()-Methode nicht aufrufen und eine Instanz Ihrer eigenen ClusterRenderer-Implementierung übergeben. Wenn Sie die ClusterManager einlassen erstellen ihre eigene DefaultClusterRenderer der Schlüssel ist es ausdrücklich hinzufügen, so dass Sie einen Verweis darauf halten kann (weil die ClusterManager keine Getter-Methode hat, so dass Sie einen Verweis auf die ClusterRenderer bekommen kann seine Verwendung):

mClusterManager = new ClusterManager<ClusterItem>(getActivity(), mMap); 
mRenderer = new DefaultClusterRenderer(getActivity(), mMap, mClusterManager); 
mClusterManager.setRenderer(mRenderer); 
mClusterManager.addItem(ClusterItem); 

Dann, wenn Sie Zugang zu einem Marker benötigen, übergeben Sie die ClusterRendererClusterItem mit dem Marker verbunden. Die ClusterItem Sie verwenden der Marker zu finden, wird die ClusterItem Sie an die ClusterManager geleitet, um die Markierung zu dem Cluster ursprünglich hinzuzufügen:

Marker marker = mRenderer.getMarker(ClusterItem); 
if(marker != null){ 
    marker.showInfoWindow(); 
} 

Das Marker Objekt ist null, wenn die Markierung noch nicht auf der Karte gemacht wurde Vergewissern Sie sich daher, dass das marker-Objekt nicht null ist, bevor Sie es verwenden.

Wenn Sie sicher sind, die Markierung auf der Karte platziert wurde, wenn Sie .getMarker() aufrufen und Marker ist immer noch null dann überschreiben die .equals() Methode im Objekt Verwendung der ClusterItem Schnittstelle zu implementieren, um sicherzustellen, dass Sie die richtige ClusterItem Objekt finden gehalten vom Renderer.

+0

Danke dir. Genau das habe ich gesucht. Mein Fehler war, dass ich den ClusterManager angeschaut habe. Ich möchte nur betonen, dass der Marker, wenn noch nicht zum Rendern (mRenderer), immer null zurückgibt. Also sobald die Methode onClusterItemRendered ausgeführt wird, bekomme ich die Markierung – robertDraven

+0

Ich hatte vor kurzem das gleiche Problem, also bin ich froh, dass ich Ihnen helfen konnte. –

Verwandte Themen