2015-10-01 6 views
8

Ich benutze das Android-Clustering-Dienstprogramm auf einer Karte und erfolgreich implementiert einen OnClick-Listener mit mClusterManager.setOnClusterItemClickListener() für alle Marker von der Cluster-Bibliothek behandelt.Android-Cluster und Marker klickt

Da ich auch möchte, dass einige Marker immer nicht gruppiert sind, füge ich auch einige Marker hinzu, ohne den mClusterManager zu verwenden, sondern direkt die mapmap.addMarker(), so bin ich sicher, dass sie nie auf der Karte geclustert sind.

Mein Problem ist, dass ich Klicks auf diese Markierungen (die immer nicht gruppierten) nicht abfangen kann, weil ich bereits mMap.setOnMarkerClickListener (mClusterManager) verwendet habe, um die Marker der geklickten Cluster zu behandeln.

Gibt es eine Möglichkeit, auf die clicked clustered marker UND die clicked marker zu hören, die nicht von der clustering library behandelt werden?

Oder gibt es eine Möglichkeit, den Cluster-Manager anzugeben, um niemals einige Marker zu clustern? In diesem Fall muss ich nicht mit diesem anderen Klick-Listener umgehen, da alle Marker mit dem Cluster-Dienstprogramm angezeigt werden.

Danke

Antwort

14

Sie können einen neuen MarkerManager erstellen, die Sie in den ClusterManager Konstruktor übergeben. Erstellen Sie dann eine neue Markersammlung unter Verwendung der MarkerManager#newCollection und fügen Sie Ihre normalen Markers mit der MarkerManager.Collection#addMarker Methode zur Karte hinzu.

Rufen Sie dann mMap.setOnMarkerClickListener(mClusterManager) an, rufen Sie mMap.setOnMarkerClickListener(mMarkerManager), und es wird Weiterleiten Ihrer Marker Click-Ereignisse an die richtigen Listener. Sie müssen Ihren onMarkerClick-Listener auch für normale Marker mit der MarkerManager.Collection#setOnMarkerClickListener(GoogleMap.OnMarkerClickListener markerClickListener)-Funktion einrichten.

Ich empfehle, über die Quelle der MarkerManager und ClusterManager Klassen zu schauen, um eine bessere Vorstellung davon zu bekommen, wie die Klassen interagieren.

+3

Perfekt es funktioniert, thx. Es hat mir sehr geholfen, den MarkerManager Link zu lesen, der eine gute Empfehlung ist. –

5

Eine weitere Möglichkeit, das Klickereignis für Marker zu empfangen, ist die Verwendung der Schnittstelle OnClusterItemClickListener.

Anruf mClusterManager.setOnClusterItemClickListener(this); und Ihre Klasse OnClusterItemClickListener

dann innerhalb der onClusterItemClick Methode implementieren machen, werden Sie die ClusterItem erhalten, welche die Markierung auf das geklickt wurde,

@Override 
public boolean onClusterItemClick(ClusterItem clusterItem) { 

    Toast.makeText(getActivity(), "Latitude " + clusterItem.getPosition().latitude, Toast.LENGTH_LONG).show(); 

    return true; 
} 
+1

Das ist einfacher. – dan

+1

Aber es hat keine weiteren Attribute, wenn Sie eine Klasse haben, die von 'ClusterItem' erweitert wurde. Zum Beispiel 'Icon',' Id', .... –

+0

@ Mr.Hyde vielleicht können Sie das System austricksen, wenn Sie eine Datenbank haben, ändern sich Lat und Lng nicht und Sie können die Daten umkehren. Ich würde das in meinem Projekt implementieren. Danke @Atul! –