You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中Google Maps聚类异常:仅显示标记不显示聚类求助

解决Google Maps Android聚类仅显示单个标记的问题

问题根源

你的代码核心错误是在循环内部重复创建ClusterManager实例,每处理一个数据就新建一个ClusterManager、绑定监听器、设置渲染器,相当于每次只给新的ClusterManager添加一个标记,旧的实例被覆盖,完全丧失了聚类的基础——所有标记需要归属于同一个ClusterManager实例。

修复步骤

  1. 将ClusterManager初始化、监听器绑定、自定义渲染器配置移到循环外部,只执行一次
  2. 循环内仅负责创建MyItem并收集到列表中
  3. 所有标记创建完成后,批量添加到ClusterManager并统一触发聚类计算

修复后代码

// 初始化ClusterManager相关配置,仅执行一次
clusterManager = new ClusterManager<MyItem>(PozicijeSvihVozilaActivity.this, googleMap);
googleMap.setOnCameraIdleListener(clusterManager);
googleMap.setOnMarkerClickListener(clusterManager);
CustomClusterRenderer renderer = new CustomClusterRenderer(PozicijeSvihVozilaActivity.this, googleMap, clusterManager);
clusterManager.setRenderer(renderer);

// 循环收集所有标记数据
List<MyItem> clusterItems = new ArrayList<MyItem>();
for(int j = 0; j < list.size(); j++){
    LatLng position = new LatLng(formatCoordinate(list.get(j).getLatitude()), formatCoordinate(list.get(j).getLongitude()));
    String title = list.get(j).getReg_broj();
    clusterItems.add(new MyItem(position, title));
}

// 批量添加并触发聚类
clusterManager.addItems(clusterItems);
clusterManager.cluster();

额外注意事项

  • 确保MyItem正确实现ClusterItem接口,必须重写getPosition()方法返回标记坐标
  • 检查CustomClusterRenderer的自定义逻辑,避免错误屏蔽聚类标记(比如错误设置聚类触发的最小数量)
  • 如果需要实时更新标记,只需调用clusterManager.clearItems()清除旧数据,重新添加新数据后再调用cluster()即可

内容的提问来源于stack exchange,提问作者Nikola Stankovic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:05:11