更新单项 GoolgeMap Cluster
Update single item GoolgeMap Cluster
我正在使用 this 库在 Android 中对 GoogleMap 进行聚类。我的问题是如何更新我从昨天开始 google 经历的单个项目,并且没有任何答案可以解释更新单个项目。我在我的项目中使用 websocket,所以我需要更新从 websocket 收到的项目数据。看下面我的实现。
My concept is doing
mClusterManager.remove(item)
mClusterManager.add(item) + mClusterManager.cluster() whenever I
receive data from websocket.
和 hasmap 在添加到集群时识别循环中的对象,例如:hashmap.put(_id,mClusterItem[i]);
现在,每当收到 websocket 数据时,我都会这样做,
onDataReceive(String _id,String name, double latlng, ....){
mClusterManager.remove(hashmap.get(_id));
appClusterItem[0] = new AppClusterItem(.....);
mClusterManager.add(appClusterItem[0]) // Here how can I add item
mClusterManager.cluster();
}
但是上面的代码在收到第一个数据时首先工作,然后从第二次开始它只会继续添加标记并且无法删除这意味着 mClusterManager.remove(hasmap.get(_id)) 不是成立。而 appClusterItem[0] 是因为我不能使用 hashmap.get(_id);在上述情况下,因为它给出了预期的错误变量。无论如何删除相同的对象并在那个地方添加对象??
我还尝试通过 mClusterManager.remove 从群集中删除标记,但遇到了一些问题。因此,就我而言,当我收到数据更改时,我会这样做:
我从列表中删除需要删除的项目,使用 mClusterManager.clearItems();
清除集群上的所有标记并将新数据放入集群。
ClusterManager removeItem()
定义如下
public void removeItem(T item) {
mAlgorithmLock.writeLock().lock();
try {
mAlgorithm.removeItem(item);
} finally {
mAlgorithmLock.writeLock().unlock();
}
}
您需要传递可能从 ClusterItem
扩展而来的自定义 Item 对象。检查库 class 定义的方法文档 here.
您是否尝试过在删除时重新集群并在添加时重新集群?我想我用那个解决了我的问题。您的代码将是:
onDataReceive(String _id,String name, double latlng, ....){
mClusterManager.remove(hashmap.get(_id));
mClusterManager.cluster(); //add this line
appClusterItem[0] = new AppClusterItem(.....);
mClusterManager.add(appClusterItem[0]) // Here how can I add item
mClusterManager.cluster(); //leave this one here
hashmap.remove(_id);
hashmap.put(_id,mClusterItem[0]); //also don't forguet to update your hashmap
}
让我知道它是否适合你!
我正在使用 this 库在 Android 中对 GoogleMap 进行聚类。我的问题是如何更新我从昨天开始 google 经历的单个项目,并且没有任何答案可以解释更新单个项目。我在我的项目中使用 websocket,所以我需要更新从 websocket 收到的项目数据。看下面我的实现。
My concept is doing mClusterManager.remove(item) mClusterManager.add(item) + mClusterManager.cluster() whenever I receive data from websocket.
和 hasmap 在添加到集群时识别循环中的对象,例如:hashmap.put(_id,mClusterItem[i]);
现在,每当收到 websocket 数据时,我都会这样做,
onDataReceive(String _id,String name, double latlng, ....){
mClusterManager.remove(hashmap.get(_id));
appClusterItem[0] = new AppClusterItem(.....);
mClusterManager.add(appClusterItem[0]) // Here how can I add item
mClusterManager.cluster();
}
但是上面的代码在收到第一个数据时首先工作,然后从第二次开始它只会继续添加标记并且无法删除这意味着 mClusterManager.remove(hasmap.get(_id)) 不是成立。而 appClusterItem[0] 是因为我不能使用 hashmap.get(_id);在上述情况下,因为它给出了预期的错误变量。无论如何删除相同的对象并在那个地方添加对象??
我还尝试通过 mClusterManager.remove 从群集中删除标记,但遇到了一些问题。因此,就我而言,当我收到数据更改时,我会这样做:
我从列表中删除需要删除的项目,使用 mClusterManager.clearItems();
清除集群上的所有标记并将新数据放入集群。
ClusterManager removeItem()
定义如下
public void removeItem(T item) {
mAlgorithmLock.writeLock().lock();
try {
mAlgorithm.removeItem(item);
} finally {
mAlgorithmLock.writeLock().unlock();
}
}
您需要传递可能从 ClusterItem
扩展而来的自定义 Item 对象。检查库 class 定义的方法文档 here.
您是否尝试过在删除时重新集群并在添加时重新集群?我想我用那个解决了我的问题。您的代码将是:
onDataReceive(String _id,String name, double latlng, ....){
mClusterManager.remove(hashmap.get(_id));
mClusterManager.cluster(); //add this line
appClusterItem[0] = new AppClusterItem(.....);
mClusterManager.add(appClusterItem[0]) // Here how can I add item
mClusterManager.cluster(); //leave this one here
hashmap.remove(_id);
hashmap.put(_id,mClusterItem[0]); //also don't forguet to update your hashmap
}
让我知道它是否适合你!