OSMDroid - getOverlays().remove 仅删除 1 个标记

OSMDroid - getOverlays().remove only removes 1 Marker

我正在使用 OSMDroid 并有一堆不同的标记,并尝试使用复选框设置来切换标记覆盖 on/off。 我抓取一个 json 数组并获取我的数据来创建我的标记以及它们的 gps 位置。一切都很好。

我可以使用以下方法很好地显示标记:

mapView.getOverlays().add(overlay);

但是当我尝试使用以下方法反转它时:

mapView.getOverlays().remove(overlay);

遗憾的是,它只会删除最后放置的标记,而不是全部。 请告诉我我的失败在哪里。谢谢!

编辑附加代码:

List<OverlayItem> itemList = new ArrayList<OverlayItem>();
GeoPoint geoPoint = new GeoPoint(lat, lng);
overlayItem = new OverlayItem("Title", "Snippet", geoPoint);

overlayItem.setMarker(getResources().getDrawable(R.drawable.marker));

itemList.add(overlayItem);

overlay = new ItemizedOverlayWithFocus<OverlayItem>(getApplicationContext(), itemList, 
        new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {

            @Override
            public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
            // This will do something eventually
            return true;
            }

            @Override
            public boolean onItemLongPress(final int index, final OverlayItem item) {
            // This will do something eventually
            return false;
            }
        });

mapView.getOverlays().add(overlay);

解决方案(这对我有用)

ArrayList<Marker> myMarkers= new ArrayList<>();

Marker myMarker = new Marker(mapView);
                    myMarker.setPosition(new GeoPoint(lat, lng));
                    myMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
                    myMarker.setTitle(TITLE);
                    myMarker.setIcon(getResources().getDrawable(R.drawable.myMarker));
                    myMarker.setSnippet(SNIPPET);
                    mapView.getOverlays().add(myMarker);
                    myMarkers.add(myMarker);

然后我可以通过以下方式关闭所有标记:

for (Marker m : myMarkers) {
     mapView.getOverlays().remove(m);
     }

您没有显示足够的代码来确定,但我猜,您的 myMarker 变量包含对最后添加的标记的引用,因此您只删除了最后一个。

您应该保留对所有标记的引用(例如在列表中)并在删除时仔细检查它们。

或者您可以使用 FolderOverlay 进行分组并轻松删除所有标记。