uni*_*pin 5 android google-maps-markers google-maps-android-api-2
我在为不在集群中的标记实现 OnClickListener 时遇到问题,即未使用以下方法添加:
mClusterManager.addItem(markerCluster);
Run Code Online (Sandbox Code Playgroud)
我已将 OnMarkerClickLister 设置如下:
mMap.setOnCameraIdleListener(mClusterManager);
mMap.setOnMarkerClickListener(mClusterManager);
Run Code Online (Sandbox Code Playgroud)
如果我只是使用:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
点击标记根本不起作用。
例如:我有这种情况:
两个绿点和大蓝点(数字 6)是一个集群,但红色标记不在集群中,因为我不希望它像其他标记一样集群。当我单击红色标记时,通常会显示 InfoWindow,但 onMarkerClick 不起作用 - 以及 OnClusterItemClickListener。但是当我点击集群中的标记时, OnClusterItemClickListener 工作。
希望你明白我想要达到的目标。如果没有,请告诉我。
更新答案
您在编辑中添加的图像清楚地说明了问题,谢谢!
为了也解决这个问题,我们需要以不同的方式注册侦听器。即:通过将其注册到 ClusterManager 的 MarkerManager,因为该类现在处理所有标记。我们还需要以不同的方式添加 NormalMarkers,所以让我们一步一步来:
1)更新OnMarkerClickListener的mMap:
mMap.setOnMarkerClickListener(mClusterManager.getMarkerManager()); // Note the `MarkerManager` here
Run Code Online (Sandbox Code Playgroud)
2) 这MarkerManager包含所有集合。我们需要在这个管理器上创建一个新集合,我们将向其中添加应与集群分开显示的 NormalMarkers:
MarkerManager.Collection normalMarkersCollection = mClusterManager.getMarkerManager().newCollection();
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
4)最后但并非最不重要的:我们想要OnClickListener它:
normalMarkersCollection.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener {
public boolean onMarkerClick(marker: Marker) {
// NORMAL MARKER CLICKED!
return false;
}
})
Run Code Online (Sandbox Code Playgroud)
5)完成!现在,普通标记像以前一样添加到地图中,但带有一个有效的OnMarkerClickListener.
较早的回答
(为集群和集群项目设置点击监听器)
您应该将点击侦听器添加到mClusterManager. mMap使用 ClusterManager 时,在 上设置 clicklistener不起作用。
因此,不要使用mMap.setOnMarkerClickListener,而是ClusterItemClickListener在集群管理器上设置:
mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<MyItem>() {
@Override
public boolean onClusterItemClick(MyItem item) {
Log.d("cluster item","clicked");
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
此外,如果要捕获集群项的 onclick,请使用ClusterClickListener:
mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() {
@Override
public boolean onClusterClick(Cluster<MyItem> cluster) {
Log.d("cluster","clicked");
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |