- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对不起我的英语
我尝试了 ClusterManager<?>.getMarkerCollection().getMarkers()
方法,但它返回空集合。
我在我的应用程序中使用 Google Maps Utility Library
.每次屏幕旋转后,我都会创建AsynkTask
并在后台线程中从数据库中读取数据并将项目添加到 ClusterManager
:
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
SomeData row = readSomeDataRow(cursor);
clusterManager.addItem(new ClusterItemImpl(row));
cursor.moveToNext();
}
当 AsyncTask
完成它的工作(即在主线程中)我试图从 ClusterManager
中获取所有标记:
clusterManager.cluster();
// cluster manager returns empty collection \|/
markers = clusterManager.getMarkerCollection().getMarkers();
但是ClusterManager
返回空集合。
可能是我打电话的时候getMarkers()
ClusterManager
但不会在 map 上放置标记,稍后会做(可能在后台线程中)。如果是这样,那我怎么才能捕获那一刻呢?
最佳答案
我会给你一个很好的解决方法。首先,我将介绍一些背景。然后,我将告诉您修改代码的非常简单的方法。
背景:我们先从库代码看一下ClusterManager.addItem的实现:
public void addItem(T myItem) {
this.mAlgorithmLock.writeLock().lock();
try {
this.mAlgorithm.addItem(myItem);
} finally {
this.mAlgorithmLock.writeLock().unlock();
}
}
如您所见,当您调用 clusterManager.addItem 时,ClusterManager 会调用 this.mAlgorithm.addItem。 mAlgorithm 是您的项目存储的地方。现在让我们看看 ClusterManager 的默认构造函数:
public ClusterManager(Context context, GoogleMap map, MarkerManager markerManager) {
...
this.mAlgorithm = new PreCachingAlgorithmDecorator(new NonHierarchicalDistanceBasedAlgorithm());
...
}
mAlgorithm 被实例化为包含 NonHierarchicalDistanceBasedAlgorithm 的 PreCachingAlgorithmDecorator。不幸的是,由于 mAlgorithm 被声明为私有(private)的,我们无法访问正在添加到算法中的项目。但是,很高兴有一个简单的解决方法!我们只需使用 ClusterManager.setAlgorithm 实例化 mAlgorithm。这允许我们访问算法类。
解决方法:这是您的代码,其中插入了解决方法。
将此声明与您的类变量放在一起:
private Algorithm<Post> clusterManagerAlgorithm;
在您实例化您的 ClusterManager 的地方,紧接其后放置:
// Instantiate the cluster manager algorithm as is done in the ClusterManager
clusterManagerAlgorithm = new NonHierarchicalDistanceBasedAlgorithm();
// Set this local algorithm in clusterManager
clusterManager.setAlgorithm(clusterManagerAlgorithm);
您可以保留将项目插入集群的代码完全相同。
当您想访问插入的项目时,您只需使用算法而不是 ClusterManager:
Collection<ClusterItemImpl> items = clusterManagerAlgorithm.getItems();
这将返回项目而不是标记对象,但我相信这是您需要的。
关于android - 谷歌地图实用程序 : how to get all markers from ClusterManager<? >?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22449438/
我正在尝试使用 ClusterManager 来对我的 CustomMapMarker 进行聚类,但是当标记数据发生变化时,我调用了 mClusterManager.cluster(),引脚位置不变。
在尝试使用 ClusterManager 时,我注意到 getMap().setOnCameraChangeListener(clusterManager) 已被弃用。查看 Github 上的 and
大家下午好,我用集群管理器管理我的 google maps v2(我正在使用这个库 android-maps-utils),我想在单击标记和单击集群管理器时获得差异,但是方法没有调用,那么我的代码出了
我在 Android 中使用 Google map ,其中有大约 800 个我想要聚类的标记和 80 个我不想聚类的标记。 对于我想要聚类的标记,我使用以下方法添加到 clusterManager m
这是我之前问题的后续问题:ClusterManager isn't redrawing Markers 我做了一些调查,发现了一些有趣的东西。 ClusterManager.clearItems()
在我的 Android 应用程序中,我必须在我的 GoogleMap 中删除并重新添加一个代表我当前位置的集群项。但是当我运行这段代码时: clusterMng.remove(myitem); 我得到
我正在使用 ClusterManager 对 android 应用程序中的标记进行分组。 我想获取标记列表并使用 mClusterManager.getMarkerCollection().getMa
在此处输入代码我需要在 Google map 上显示标记的集群。我有自定义对象: public class PostClusterItem implements ClusterItem { priva
我想在谷歌地图上实现标记聚类。它也应该涉及自定义渲染。所以我使用了 https://github.com/googlemaps/android-maps-utils 中的示例代码, 引用演示中的 Cu
对不起我的英语 我尝试了 ClusterManager.getMarkerCollection().getMarkers()方法,但它返回空集合。 我在我的应用程序中使用 Google Maps Ut
我正在尝试在我的集群 Google map 上获取对我的标记的引用(不使用 getMarkerCollections)但我找不到在哪里覆盖此功能。 我制作了一个典型的 ClusterManager,它
我可以使用哪个上下文来初始化 Kotlin Android 中的 ClusterManager? var clusterManager: ClusterManager? = null clusterM
使用 google maps api v2 for android 和 Google-Map-Utils 的集群库(渲染器和管理器) . 是否可以在两个或多个标记聚集在一起时关闭动画? 最佳答案 是的
我正在尝试为 Google Map 使用两个 ClusterManager,但我只能添加一个 clustermanager 和它的项目点击事件, googleMap.setOnMarkerClickL
我正在尝试使用来自服务器的较新数据更新我的 map ,但我不知道如何从中删除旧项目(标记和集群 - 使用 ClusterManager) map ( - 在我看来,我只能在 ClusterManage
我的 Android 应用程序中有一个谷歌地图。它充满了标记,它聚集了标记……简而言之,这是一张完全可用的 map 。 我想做的很简单。当用户点击 clusterItem 时,我想将图标更改为选定的图
我正在尝试在我的 Android 项目中使用 Google map 集群。 目前,我实际上是从演示中复制了代码 https://github.com/googlemaps/android-maps-u
我编写了以下方法来显示我的标记(集群)。然而,一些集群工作正常 - 即当我放大时,蓝色集群图标(表示 10+ for ex)消失并显示各个标记。但是,有时,当我完全放大时,蓝色群集标记仍然与单个标记之
我有一个 Google Maps V2,在我的 setUpMap() 方法中,我将 GoogleMap 附加到一个 infoWindowAdapter,如下所示: ClusterManager ren
我有一个让我发疯的问题。我已经使用集群管理器实现了一个带有一堆点的 map ,我的管理器设置如下: mClusterManager = new ClusterManager(getActivity()
我是一名优秀的程序员,十分优秀!