OSMDroid - getOverlays()。remove仅删除1个Marker

时间:2018-01-23 05:21:37

标签: android android-mapview osmdroid markers overlays

我正在使用OSMDroid,并且有一堆不同的标记,并尝试使用复选框设置打开/关闭标记叠加。 我抓住一个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);
     }

1 个答案:

答案 0 :(得分:0)

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

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

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