Android中Google Maps聚类异常:仅显示标记不显示聚类求助
解决Google Maps Android聚类仅显示单个标记的问题
问题根源
你的代码核心错误是在循环内部重复创建ClusterManager实例,每处理一个数据就新建一个ClusterManager、绑定监听器、设置渲染器,相当于每次只给新的ClusterManager添加一个标记,旧的实例被覆盖,完全丧失了聚类的基础——所有标记需要归属于同一个ClusterManager实例。
修复步骤
- 将ClusterManager初始化、监听器绑定、自定义渲染器配置移到循环外部,只执行一次
- 循环内仅负责创建MyItem并收集到列表中
- 所有标记创建完成后,批量添加到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
相关产品推荐
相关产品推荐

