更新单项 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
}

让我知道它是否适合你!