2

J'utilise Google Maps dans Android avec environ 800 marqueurs que je veux regrouper et 80 marqueurs que je ne veux pas regrouper.ClusterManager onMarkerClickListener pour les marqueurs non groupés

Pour les marqueurs que je veux regrouper, j'ajouter au clusterManager en utilisant

mClusterManager.addItem(annotation); 

Pour les marqueurs que je ne veux pas regrouper, je les ajouter directement à la markerCollection

Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions()); 

ici annoation fait référence à une instance de AirMapMarker qui est une classe personnalisée qui implémente ClusterItem

annotation contient une information personnalisée telle que la chaîne d'identification que je dois utiliser lorsque l'utilisateur appuie sur le marqueur.

Le problème est que je ne peux pas enregistrer onClickListener pour le cluster et le mapMarker. Si c'est le cas, ne connectez que les onMarkerClickListener de map.

map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    public boolean onMarkerClick(Marker marker) { 
    // Handle marker click fires correctly. 
    } 
} 

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<AirMapMarker>(){ 
    public boolean onClusterItemClick(AirMapMarker marker) { 
    // Doesn't Fire 
    } 
} 

Maintenant, le problème est, à l'intérieur onMarkerClick, je besoin d'un accès à l'identification qui fait partie de AirMapMarker, dans le cas si le clic marqueur est passé sur un seul marqueur unclustered. Je ne pouvais pas trouver un moyen de mapper Marker à AirMapMarker à l'intérieur onMarkerClick.

J'ai également essayé de supprimer complètement map.setOnMarkerClickListener et de compter uniquement sur mClusterManager.setOnClusterItemClickListener. Cependant, maintenant le problème est que lorsque le clic de marqueur se produit sur des marqueurs qui ne font pas partie du cluster, onClusterItemClick déclenche avec le paramètre null. En effet, lorsque vous ajoutez un marqueur à la carte, vous fournissez markerOptions et non un objet ClusterItem.

Il existe une option dans ClusterManager pour désactiver le clustering, mais cela se produit globalement et non pour un marqueur particulier.

Quelqu'un m'aider ou me donner des suggestions sur ce que je devrais essayer ensuite?

Répondre

0

Je ne sais pas si j'ai bien compris votre question. Mais voici une solution possible.

Les marqueurs que vous souhaitez regrouper, vous pouvez les ajouter à ClusterManager. clusterManager.addItem(yourItem);

Ceux que vous ne voulez pas regrouper, vous pouvez les ajouter directement à votre objet GoogleMap. map.addMarker

l'intérieur de votre MarkerRenderer vous pouvez remplacer

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)

et carte yourClusterItem à votre marqueur si nécessaire. Ou vous pouvez définir une balise sur votre marqueur indiquant qu'il s'agit d'un clusterItem.

Dans public boolean onMarkerClick(Marker marker) vous pouvez vérifier votre mot-clé (ou votre carte) pour avoir un comportement différent pour chaque type de marqueur.