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 进行分组并轻松删除所有标记。
我正在使用 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 进行分组并轻松删除所有标记。