Я знаю, что уже слишком поздно, но поскольку я придумал решение, которое мне помогло, я подумал о том, чтобы поделиться им, чтобы оно помогло программистам в будущем ..
@ hooked82: проблема с выполнением всего лишь
overlays.remove(position)
это список. поэтому, когда вы удаляете один элемент из списка, каждый элемент справа от этого элемента в списке смещается на одно место влево, что в конечном итоге испортит ваши позиции, что будет очень утомительно отслеживать их все время.
Во время одного из моих проектов я столкнулся с той же проблемой. Поскольку я добавлял и удалял оверлеи для некоторых обновлений, по прошествии некоторого времени было действительно трудно отслеживать позиции оверлеев в списке.
Вот что я сделал, чтобы обойти проблему, и до сих пор проблем не было.
Шаг 1: создайте свой собственный класс наложения
public class MyOverlay extends Overlay
{
private String overlayUUID;
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
-- do what you need to do here --
}
public String getOverlayUUID()
{
return overlayUUID
}
}
Шаг 2: в MapClass, где вы обрабатываете наложения. Убедитесь, что список mapOverlays является глобальным списком в классе MapView, куда вы добавляете все свои mapOverlays
List<Overlay> mapOverlays = mapView.getOverlays();
public void removeChosenOverlay(String overlayUUID)
{
for(int i=0; i<mapOverlays.size(); i++)
{
String className = mapOverlays.get(i).getClass().getSimpleName();
if(className.equals("MyOverlay"))
{
MyOverlay myOverlay = (MyOverlay) mapOverlays.get(i);
if((myOverlay != null) && (myOverlay.getOverlayUUID.equals(overlayUUID)))
{
mapOverlays.remove(i);
mapView.invalidate()
break;
}
}
}
}
С помощью описанного выше метода можно однозначно идентифицировать каждый оверлей с помощью UUID (в моем случае это была строка, но вы можете самостоятельно создавать свои UUID в любом формате, который вы хотите) и успешно удалить соответствующий элемент наложения из списка. наложений, не беспокоясь об их относительном положении в списке.
Я надеюсь, что это поможет другим, кто сталкивается с теми же проблемами, с уникальными идентифицирующими оверлеями.