如何防止标记在clustermanager中重复

时间:2018-09-15 23:44:49

标签: android arraylist collections markerclusterer geofire

我正在使用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 :(得分: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很容易。