ClusterManager onMarkerClickListener用于非聚集标记

时间:2017-05-06 02:07:36

标签: android google-maps google-maps-markers google-maps-android-api-2 markerclusterer

我在Android中使用谷歌地图,我想要聚类的800个标记和80个我不想聚集的标记。

对于我想要聚类的标记,我使用

添加到clusterManager
mClusterManager.addItem(annotation);

对于我不想聚类的标记,我将它们直接添加到markerCollection

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

此处annoation是指AirMapMarker的一个实例,它是一个实现ClusterItem的自定义类

annotation包含自定义信息,例如当用户点击标记时我需要使用的标识字符串。

问题是,我无法为群集和mapMarker注册onClickListener。如果我这样做,只有map的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触发。这是因为在向地图添加标记时,您提供了markersOptions而不是ClusterItem对象。

ClusterManager中有一个选项可以关闭群集,但这种选择是全局发生的,而不是特定的标记。

任何人都会帮助我或者给我一些关于我接下来应该尝试的建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

在MarkerRenderer中,您可以覆盖

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)

并根据需要将yourClusterItem映射到Marker。或者,您可以为标记设置标记,表明它是clusterItem。

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