Обновление отдельного элемента GoolgeMap Cluster - PullRequest
0 голосов
/ 21 ноября 2018

Я использую этот libray для кластеризации GoogleMap в Android.У меня вопрос, как я могу обновить один элемент, который я прошел через Google со вчерашнего дня, и нет никаких ответов, объясняющих обновление одного элемента.Я использую websocket в своем проекте, поэтому мне нужно обновить данные элемента, которые были получены из websocket.Посмотрите мою реализацию ниже.

Моя концепция - mClusterManager.remove (item) mClusterManager.add (item) + mClusterManager.cluster () всякий раз, когда я получаю данные из websocket.

и hasmap для идентификации объекта в цикле при добавлении в cluseter, например: hashmap.put(_id,mClusterItem[i]);

Теперь, всякий раз, когда на веб-сокете получаются данные, я делаю,

    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 голосов
/ 30 ноября 2018

ClusterManager имеет removeItem(), определенный как ниже

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

Вам необходимо передать пользовательский объект Item, который может быть расширен с ClusterItem.Проверьте документацию метода из класса библиотеки, определенного здесь .

0 голосов
/ 11 апреля 2019

Пробовали ли вы повторную кластеризацию при удалении и повторную кластеризацию при добавлении?Я думаю, что я решаю свою с этим.Ваш код будет:

 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
}

дайте мне знать, если он работает для вас!

0 голосов
/ 21 ноября 2018

Я также пытался удалить маркер из кластера через mClusterManager.remove и у меня возникли проблемы с ним.Таким образом, в моем случае, когда я получил изменения данных, я делаю это: я удаляю элемент, который мне нужно удалить из моего списка, очищаю все маркеры в кластере с mClusterManager.clearItems(); и помещаю свежие данные в кластер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...