Как извлечь OverlayItem из Overlay? - PullRequest
       50

Как извлечь OverlayItem из Overlay?

0 голосов
/ 10 февраля 2012

Мне нужно проверить, существуют ли данные недавно созданного 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 ]

0 голосов
/ 10 февраля 2012

Этот код выглядит немного странно. Куда приходит itemToCompare? Я не вижу нигде заявленного. Если itemToCompare - это тот же класс, что и overlayItem, почему бы не переопределить equals в классе и использовать его вместо сравнения каждого параметра?

Еще лучше, превосходные равные в классе предоставят вам доступ к:

mapOverlays.contains(overlayItem); 

Таким образом, весь ваш метод isExisting будет заменен приведенным выше вызовом. Вы можете увидеть больше информации о том, как работает здесь .

0 голосов
/ 13 февраля 2012

Спасибо всем за ответ на мой вопрос.Я обнаружил, что моя проблема возникает из-за того, что я преобразую mapOverlays в неправильный класс.

Кроме того, вместо извлечения OverlayItem из mapOverlays (что я не могу выяснить, как), я просто делаю проверку внутриaddOverlay (OverlayItem overlayItem).Я не могу сделать это раньше, потому что я всегда переинициализирую значение моего itemizedOverlay.Поэтому я не могу сравнить недавно добавленный OverlayItem со старым, потому что itemizedOverlay больше не содержит старые значения.Что я сделал, вместо того, чтобы всегда повторно инициализировать itemizedOverlay, я просто всегда очищаю mapOverlays, который равен mapView.getOverlays (). Clear ().

0 голосов
/ 10 февраля 2012

Я не знаю MapOverlay, но вы, вероятно, не можете поместить List в MapOverlay

...