gpt4 book ai didi

android - 用于非集群标记的 ClusterManager onMarkerClickListener

转载 作者:行者123 更新时间:2023-11-29 02:41:22 26 4
gpt4 key购买 nike

我在 Android 中使用 Google map ,其中有大约 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 映射到 onMarkerClick 内的 AirMapMarker 的方法。

我还尝试完全删除 map.setOnMarkerClickListener 并仅依赖于 mClusterManager.setOnClusterItemClickListener。但是,现在的问题是,当标记点击发生在不属于集群的标记上时,onClusterItemClick 会触发并带有参数 null。这是因为在向 map 添加标记时,您提供的是 markerOptions 而不是 ClusterItem 对象。

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

有人帮我解决问题或给我建议我接下来应该尝试什么吗?

最佳答案

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

想要聚类的标记,可以添加到ClusterManager中。clusterManager.addItem(yourItem);

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

在您的 MarkerRenderer 中,您可以覆盖

protected void onClusterItemRendered(YourClusterItem clusterItem, Marker 标记)

并在需要时将 yourClusterItem 映射到您的 Marker。或者您可以为您的标记设置一个标记,表明它是一个 clusterItem。

public boolean onMarkerClick(Marker 标记)您可以检查您的标签(或您的 map ),让每种标记都有不同的行为。

关于android - 用于非集群标记的 ClusterManager onMarkerClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43815967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com