【发布时间】:2017-10-04 14:04:00
【问题描述】:
我在 Android 中使用 Google 地图,其中包含大约 800 个我想要聚类的标记和 80 个我不想聚类的标记。
对于我想要集群的标记,我使用添加到 clusterManager 中
mClusterManager.addItem(annotation);
对于我不想聚类的标记,我直接将它们添加到 markerCollection
Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions());
这里annoation指的是AirMapMarker的一个实例,它是一个实现ClusterItem的自定义类
annotation 包含一个自定义信息,例如当用户点击标记时我需要使用的标识字符串。
问题是,我无法同时为集群和 mapMarker 注册 onClickListener。如果我这样做了,只会触发地图的 onMarkerClickListener。
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
}
}
现在的问题是,在 onMarkerClick 内部,我需要访问作为 AirMapMarker 一部分的标识,以防标记单击发生在单个非聚集标记上。我想不出将Marker 映射到AirMapMarker 内部onMarkerClick 的方法。
我还尝试完全删除 map.setOnMarkerClickListener 并仅依赖 mClusterManager.setOnClusterItemClickListener。然而,现在的问题是,当标记点击发生在不属于集群的标记上时,onClusterItemClick 会使用参数null 触发。这是因为在向地图添加标记时,您提供的是 markerOptions 而不是 ClusterItem 对象。
ClusterManager 中有一个选项可以关闭集群,但这会在全局范围内发生,而不是针对特定标记。
有人帮助我或给我建议我下一步应该尝试什么?
【问题讨论】:
标签: android google-maps google-maps-markers google-maps-android-api-2 markerclusterer