我无法为不在群集中的标记实现OnClickListener,即不使用以下方法添加:
mClusterManager.addItem(markerCluster);
我已将OnMarkerClickLister设置如下:
mMap.setOnCameraIdleListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
如果我只是使用:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
});
点击标记根本不起作用。
例如:我有这种情况:
两个绿点和大蓝点(数字6)是一个群集,但红色标记不在群集中,因为我不希望它像其他标记一样聚集。 InfoWindow通常在我点击红色标记时显示,但onMarkerClick不起作用 - 以及OnClusterItemClickListener。但是,当我单击Cluster中的标记时,OnClusterItemClickListener可以正常工作。
希望你明白我想要实现的目标。如果没有,请告诉我。
更新的答案
您在编辑中添加的图像清楚地解释了问题,谢谢!
为了解决这个问题,我们需要以不同的方式注册监听器。即:通过将其注册到ClusterManager的MarkerManager,因为该类现在处理所有标记。我们还需要以不同的方式添加NormalMarkers,所以让我们一步一步地完成它:
1)更新OnMarkerClickListener
的mMap
:
mMap.setOnMarkerClickListener(mClusterManager.getMarkerManager()); // Note the `MarkerManager` here
2)这个MarkerManager
拥有所有收藏品。我们需要在这个管理器上创建一个新的集合,我们将添加应该与集群分开显示的NormalMarkers:
MarkerManager.Collection normalMarkersCollection = mClusterManager.getMarkerManager().newCollection();
3)添加标记的方式类似于之前的标记,但是在我们创建的集合上使用addMarker()
方法。我们必须将MarkerOptions()
对象传递给此:
// Create a normal marker
val markerOptions = MarkerOptions()
.position(new LatLng(...))
.title("My marker")
.snippet("With description")
// Add it to the collection
normalMarkersCollection.addMarker(markerOptions)
4)最后但并非最不重要:我们想要OnClickListener
:
normalMarkersCollection.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener {
public boolean onMarkerClick(marker: Marker) {
// NORMAL MARKER CLICKED!
return false;
}
})
5)完成!现在,正常的标记就像以前一样被添加到地图中,但是使用了OnMarkerClickListener
。
早先的回答
(设置群集和群集项的单击侦听器)
你应该将clicklistener添加到qazxsw poi中。使用ClusterManager时,在qazxsw poi上设置单击侦听器不起作用。
因此,不要使用mClusterManager
,而是在集群管理器上设置mMap
:
mMap.setOnMarkerClickListener
此外,如果要捕获群集项目项目的onclick,请使用ClusterItemClickListener
:
mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() {
@Override
public boolean onClusterItemClick(MyItem item) {
Log.d("cluster item","clicked");
return true;
}
});
如果你想让Marker和Cluster听众都工作,你可以写
ClusterClickListener
在你的mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {
@Override
public boolean onClusterClick(Cluster<MyItem> cluster) {
Log.d("cluster","clicked");
return true;
}
});
里面