如何防止标记在clustermanager中重复

问题描述 投票:0回答:1

我正在使用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);


    }
android arraylist collections markerclusterer geofire
1个回答
0
投票

根据您发布的代码,两点可以成为问题的根源。

首先,它是多次调用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中使用the autogenerating function很容易。

© www.soinside.com 2019 - 2024. All rights reserved.