我正在使用this libray将Android中的GoogleMap集群。我的问题是如何更新我昨天从Google查过的单个项目,没有答案可以解释更新单个项目。我在项目中使用了websocket,因此我需要更新从websocket接收到的项目数据。在下面查看我的实现。
我的想法正在做 mClusterManager.remove(项目) 每当我mClusterManager.add(item)+ mClusterManager.cluster() 从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);在上述情况下,因为它给出了预期的错误变量。无论如何要删除相同的对象并在该位置添加对象?
答案 0 :(得分:1)
我还尝试通过mClusterManager.remove从群集中删除标记,并对其产生了一些问题。因此,就我而言,当我收到数据更改时,我将执行以下操作:
我从列表中删除了需要删除的项目,使用mClusterManager.clearItems();
清除了集群中的所有标记,并将新数据放入集群中。
答案 1 :(得分:1)
ClusterManager的removeItem()
定义如下
public void removeItem(T item) {
mAlgorithmLock.writeLock().lock();
try {
mAlgorithm.removeItem(item);
} finally {
mAlgorithmLock.writeLock().unlock();
}
}
您需要传递自ClusterItem
起扩展的自定义Item对象。从定义的库类here中检查方法文档。
答案 2 :(得分:0)
您是否尝试过在删除时重新隐藏,并在添加时重新隐藏?我想我可以解决这个问题。您的代码为:
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
}
让我知道它是否对您有用!