ClusterManager onMarkerClickListener 用于非聚集标记

Posted

技术标签:

【中文标题】ClusterManager onMarkerClickListener 用于非聚集标记【英文标题】:ClusterManager onMarkerClickListener for non-clustered markers 【发布时间】: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 中有一个选项可以关闭集群,但这会在全局范围内发生,而不是针对特定标记。

有人帮助我或给我建议我下一步应该尝试什么?

【问题讨论】:

【参考方案1】:

我不知道我是否正确理解了你的问题。但这里有一个可能的解决方案。

你想要集群的标记,你可以将它们添加到ClusterManager。 clusterManager.addItem(yourItem);

您不想集群的那些,您可以将它们直接添加到您的 GoogleMap 对象中。 map.addMarker

在您的 MarkerRenderer 中,您可以覆盖

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)

如果需要,将 yourClusterItem 映射到您的标记。或者你可以为你的标记设置一个标签,表明它是一个 clusterItem。

public boolean onMarkerClick(Marker marker) 您可以检查您的标签(或您的地图),以使每种标记具有不同的行为。

【讨论】:

以上是关于ClusterManager onMarkerClickListener 用于非聚集标记的主要内容,如果未能解决你的问题,请参考以下文章

从 ClusterManager 获取标记

使用 ClusterManager 时如何更新 Map 上的标记

ClusterManager onMarkerClickListener 用于非聚集标记

ClusterManager 重绘 Google maps v2 utils 的标记

ClusterManager OnClusterClickListener 未调用

来自 android:android-maps-utils 的 ClusterManager 已更改且不兼容