繁体   English   中英

更新单个项目GoolgeMap Cluster

[英]Update single item GoolgeMap Cluster

我正在使用库来在Android中集群GoogleMap。 我的问题是如何从昨天更新我通过谷歌的单个项目,没有解释更新单项的答案。 我在我的项目中使用websocket所以我需要更新从websocket接收的项目数据。 看下面我的实现。

我的概念是每当我从websocket接收数据时都会执行mClusterManager.remove(item)mClusterManager.add(item)+ mClusterManager.cluster()。

和hasmap一起识别循环上的对象,同时添加到cluseter,如: 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();清除集群上的所有标记mClusterManager.clearItems(); 并将新数据放入群集。

ClusterManager具有如下定义的removeItem()

public void removeItem(T item) {
        mAlgorithmLock.writeLock().lock();
        try {
            mAlgorithm.removeItem(item);
        } finally {
            mAlgorithmLock.writeLock().unlock();
        }
}

您需要传递可能从ClusterItem扩展的自定义Item对象。 此处定义的库类中检查方法文档。

添加时,您是否尝试在重新删除和重新集群时重新集群? 我想我用那个解决了我的问题。 你的代码是:

 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
}

让我知道它是否适合你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM