更新单个项目GoolgeMap集群

时间:2018-11-21 05:43:36

标签: java android websocket hashmap markerclusterer

我正在使用this libray将Android中的GoogleMap集群。我的问题是如何更新我昨天从Google查过的单个项目,没有答案可以解释更新单个项目。我在项目中使用了websocket,因此我需要更新从websocket接收到的项目数据。在下面查看我的实现。

  

我的想法正在做   mClusterManager.remove(项目)   每当我mClusterManager.add(item)+ mClusterManager.cluster()   从websocket接收数据。

和hasmap标识循环中的对象,同时添加到像hashmap.put(_id,mClusterItem[i]);

这样的cluseter中

现在,每当收到有关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);在上述情况下,因为它给出了预期的错误变量。无论如何要删除相同的对象并在该位置添加对象?

3 个答案:

答案 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
}

让我知道它是否对您有用!