Как извлечь OverlayItem из Overlay?
Мне нужно проверить, существуют ли данные недавно созданного OverlayItem в списке OverlayItem, уже отображенном на карте. Я сделал код, чтобы проверить, существуют ли данные OverlayItem, но я столкнулся с ошибкой. Как я могу извлечь OverlayItem из Overlay?
Мой текущий код выглядит так:
//where mapOverlays = mapView.getOverlays() and overlayItem is the newly created overlayItem
public boolean isExisting(List<Overlays> mapOverlays, OverlayItem overlayItem)
{
ItemizedOverlay overlay;
OverlayItem itemToCompare;
for(int i = 0; i < mapOverlays.size(); i++)
{
overlay = (ItemizedOverlay)mapOverlays; //I am getting an error here: java.util.Collections$SynchronizedRandomAccessList (from e.getMessage()). The stack trace does not contain any specific exception but only the trace of the error pointing to this line.
existingOverlayItem = overlay.getItem(i);
if(itemToCompare.getPoint().equals(overlayItem.getPoint())
&& itemToCompare.getSnippet().equals(overlayItem.getSnippet())
&& itemToCompare.getTitle().equals(overlayItem.getTitle()))
return true; //if all data are the same
}
return false;
}
3 ответа
Спасибо всем за ответ на мой вопрос. Я обнаружил, что моя проблема возникает из-за того, что я преобразую mapOverlays в неправильный класс.
Кроме того, вместо извлечения OverlayItem из mapOverlays (что я не могу понять, как), я просто делаю проверку внутри addOverlay(OverlayItem overlayItem). Я не могу сделать это раньше, потому что я всегда переинициализирую значение моего itemizedOverlay. Поэтому я не могу сравнить недавно добавленный OverlayItem со старым, потому что itemizedOverlay больше не содержит старые значения. Что я сделал, вместо того, чтобы всегда повторно инициализировать itemizedOverlay, я просто всегда очищаю mapOverlays, который равен mapView.getOverlays(). Clear().
Этот код выглядит немного странно. Куда прибывает itemToCompare? Я не вижу нигде заявленного. Если itemToCompare - это тот же класс, что и overlayItem, почему бы не переопределить equals в классе и использовать его вместо сравнения каждого параметра?
Более того, превосходные равные в классе предоставят вам доступ к:
mapOverlays.contains(overlayItem);
Таким образом, весь ваш метод isExisting будет заменен приведенным выше вызовом. Вы можете увидеть больше информации о том, как работают равные здесь.
Я не знаю MapOverlay, но вы, вероятно, не можете поместить List в MapOverlay