如何管理点击Android谷歌地图API中不在群集中的标记?

问题描述 投票:1回答:1

我无法为不在群集中的标记实现OnClickListener,即不使用以下方法添加:

 mClusterManager.addItem(markerCluster);

我已将OnMarkerClickLister设置如下:

 mMap.setOnCameraIdleListener(mClusterManager);
 mMap.setOnMarkerClickListener(mClusterManager);

如果我只是使用:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            return false;
        }
    });

点击标记根本不起作用。

例如:我有这种情况:

enter image description here

两个绿点和大蓝点(数字6)是一个群集,但红色标记不在群集中,因为我不希望它像其他标记一样聚集。 InfoWindow通常在我点击红色标记时显示,但onMarkerClick不起作用 - 以及OnClusterItemClickListener。但是,当我单击Cluster中的标记时,OnClusterItemClickListener可以正常工作。

希望你明白我想要实现的目标。如果没有,请告诉我。

android google-maps-markers google-maps-android-api-2
1个回答
1
投票

更新的答案

您在编辑中添加的图像清楚地解释了问题,谢谢!

为了解决这个问题,我们需要以不同的方式注册监听器。即:通过将其注册到ClusterManager的MarkerManager,因为该类现在处理所有标记。我们还需要以不同的方式添加NormalMarkers,所以让我们一步一步地完成它:

1)更新OnMarkerClickListenermMap

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;
    }
});

0
投票

如果你想让Marker和Cluster听众都工作,你可以写

ClusterClickListener

在你的mClusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener<MyItem>() { @Override public boolean onClusterClick(Cluster<MyItem> cluster) { Log.d("cluster","clicked"); return true; } }); 里面

© www.soinside.com 2019 - 2024. All rights reserved.