ClusterManager OnClusterClickListener 未调用

Posted

技术标签:

【中文标题】ClusterManager OnClusterClickListener 未调用【英文标题】:ClusterManager OnClusterClickListener not called 【发布时间】:2018-02-20 00:48:51 【问题描述】:

大家下午好,我用集群管理器管理我的谷歌地图 v2(我正在使用这个库 android-maps-utils),我想获得单击标记和单击集群管理器时的差异,但是方法没有调用,所以我的代码出了什么问题,我在这个小问题上花了10天,所以请帮忙。

这是我的完整代码:

public class BigClusteringDemoActivity extends BaseDemoActivity implements ClusterManager.OnClusterClickListener,ClusterManager.OnClusterItemClickListener 
    private ClusterManager<MyItem> mClusterManager;

    @Override
    protected void startDemo() 
        getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));

        mClusterManager = new ClusterManager<MyItem>(this, getMap());

        getMap().setOnCameraChangeListener(mClusterManager);
        try 
            readItems();
         catch (JSONException e) 
            Toast.makeText(this, "Problem reading list of markers.", Toast.LENGTH_LONG).show();
        
        getMap().setOnMarkerClickListener(mClusterManager);

    


    private void readItems() throws JSONException 
        InputStream inputStream = getResources().openRawResource(R.raw.radar_search);
        List<MyItem> items = new MyItemReader().read(inputStream);
        for (int i = 0; i < 10; i++) 
            double offset = i / 60d;
            for (MyItem item : items) 
                LatLng position = item.getPosition();
                double lat = position.latitude + offset;
                double lng = position.longitude + offset;
                MyItem offsetItem = new MyItem(lat, lng);
                mClusterManager.addItem(offsetItem);
            
        
    


    @Override
    public boolean onClusterClick(Cluster cluster) 
        Log.d("cluster","clicked" + cluster.getItems());
        return false;
    

    @Override
    public boolean onClusterItemClick(ClusterItem item) 
        Log.d("cluster","clicked" + item.getPosition());
        return false;
    

【问题讨论】:

【参考方案1】:

您尚未使用 onClick 将 ClusterManager 连接到地图

你有这个getMap().setOnCameraIdleListener(mClusterManager);

也尝试添加这些

getMap().setOnMarkerClickListener(mClusterManager);
mClusterManager.setOnClusterClickListener(this);
mClusterManager.setOnClusterItemClickListener(this);`

这将使用您添加的侦听器的实现。

【讨论】:

我使用它们,但我仍然没有得到任何结果。 您说“这是我的全部代码”,而这 3 行不存在 :) 如果它们不耦合,它将不会注册侦听器。 感谢您的回答。我只是一个初学者:) 请除了这些行之外会导致同样的问题吗? 如果你是初学者,你检查过你的安卓显示器的日志文件吗? :) 除了打印那些记录之外,现在什么都不应该发生 非常感谢你现在它工作了,你相信没有任何其他想法导致这个问题导致我删除了一个怀疑库并且它工作了。^^【参考方案2】:

我已经设法找到了点击侦听器的 ClusterManager 初始化序列终于起作用了:

1) 初始化映射

mMap = googleMap

2) 初始化集群管理器

mClusterManager = ClusterManager(requireContext(), mMap)

3) 设置地图 OnMarkerClickListener

mMap.setOnMarkerClickListener(mClusterManager)

4) 初始化集群管理器

mClusterManager = ClusterManager(requireContext(), mMap)

5) 设置集群点击监听

mClusterManager.setOnClusterItemClickListener 
    println("CLUST ITEM CLICK")
    return@setOnClusterItemClickListener false

mClusterManager.setOnClusterClickListener 
    println("CLUST CLICK")
    return@setOnClusterClickListener false

6) 当你现在使用你的自定义渲染时:

mClusterManager.renderer = CustomIconRenderer(requireContext(), mMap, mClusterManager)

【讨论】:

所有这些都应该在 onMapReady 事件中完成。为什么第四点和第二点一样? CustomIconRenderer 是什么?

以上是关于ClusterManager OnClusterClickListener 未调用的主要内容,如果未能解决你的问题,请参考以下文章

从 ClusterManager 获取标记

使用 ClusterManager 时如何更新 Map 上的标记

ClusterManager onMarkerClickListener 用于非聚集标记

ClusterManager 重绘 Google maps v2 utils 的标记

ClusterManager OnClusterClickListener 未调用

来自 android:android-maps-utils 的 ClusterManager 已更改且不兼容