我正在使用Android中的Google Maps,其中约800个标记我想群集和80个标记,我不想群集。
对于我要群集的标记,我使用
添加到clustermanagermClusterManager.addItem(annotation);
对于我不想群集的标记,我将它们直接添加到MarkerCollection
Marker marker = mClusterManager.getMarkerCollection().addMarker(annotation.getMarkerOptions());
在这里annoation
是指Airmapmarker的实例,该实例是实现ClusterItem
annotation
包含一个自定义信息,例如标识字符串,我需要在标记上的用户点击时使用。
问题是,我无法为群集和MapMarker注册Onclicklistener。如果我这样做,只有地图的OnMarkerClickListener fires。
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的标识,如果标记单击发生在单个未簇的标记上,则需要访问AirMapmarker的一部分。我无法找到一种将Marker
映射到onMarkerClick
内的AirMapMarker
的方法。
我还尝试完全删除map.setOnMarkerClickListener
并仅依靠mClusterManager.setOnClusterItemClickListener
。但是,现在问题在于,当标记单击发生在不属于群集的一部分的标记上时,onClusterItemClick
用参数null
发射。这是因为在地图上添加标记时,您提供标记物而不是簇位对象。
clustermanager内部有选项可以关闭聚类,但这在全球范围内发生,而不是针对特定标记。
有人帮助我或给我关于接下来应该尝试的建议?
我不知道我是否正确理解您的问题。但这是一个可能的解决方案。
您要群集的标记,您可以将它们添加到簇曼格。 clusterManager.addItem(yourItem);
您不想群集的
可以将它们直接添加到GoogleMap对象中。 map.addMarker
在您的Markerrenderer内部,您可以覆盖
protected void onClusterItemRendered(YourClusterItem clusterItem, Marker marker)
,如果需要,将您的clusteritem映射到标记。或者,您可以将标签设置为标记,表明它是簇。
在public boolean onMarkerClick(Marker marker)
中您可以检查标签(或地图(以具有每种标记的不同行为。