Как предотвратить повторение маркера в clustermanager - PullRequest
0 голосов
/ 16 сентября 2018

Я использую библиотеку geofire для загрузки данных из firebase3 в определенной области, но когда я добавляю новый маркер в базу данных и проверяю свою карту, я обнаружил, что несколько маркеров было добавлено в одинаковых координатах latlng, мой вопрос как предотвратить повторение маркера в тех же координатах. Вот метод Geofire:

geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
                @Override
                public void onKeyEntered(String key, GeoLocation location) {


                    try{
                        items.add(new MyItem(location.latitude, location.longitude));
                        Log.d("onKey","called");
                    }catch (ClassCastException e){
                        Log.d("classCastException","");
                    }


                }

                @Override
                public void onKeyExited(String key) {

                }

                @Override
                public void onKeyMoved(String key, GeoLocation location) {

                }

                @Override
                public void onGeoQueryReady() {
                    parseJsonToList();
                }

                @Override
                public void onGeoQueryError(DatabaseError error) {

                }
            });

Метод ParseJsonToList:

private void parseJsonToList() {


        itemss = clusterManagerAlgorithm.getItems();
        try {


            items.removeAll(itemss);
        }catch (IndexOutOfBoundsException e){
            Log.d("itemsDoesn't exist"," : ");
        }


        mClusterManager.clearItems();
        mClusterManager.cluster();
        mClusterManager.addItems(items);
        Log.d("items"," : " + items);


    }

1 Ответ

0 голосов
/ 16 сентября 2018

Исходя из кода, который вы опубликовали, источником проблемы могут быть две точки.

Во-первых, это множественные вызовы GeoQueryEventListener.onKeyEntered(), чтобы исправить это, вы можете обойти это так:

try{
    MyItem myItem = new MyItem(location.latitude, location.longitude);
    if (!items.contains(myItem)) {
        items.add(myItem);
    }
    Log.d("onKey","called");
    }catch (ClassCastException e){
         Log.d("classCastException","");
    }

Во-вторых, может быть, вы забыли переопределить методы equals() и hashcode() класса MyItem.Поэтому, когда вы звоните items.removeAll(itemss);, ни один элемент не был удален.

В обоих случаях требуется переопределение equals() и hashcode() методов класса MyItem.Это легко сделать с функцией автогенерации в AndroidStudio.

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