Как извлечь 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

Другие вопросы по тегам