2010-01-16 5 views
2

Я хотел бы сделать наложение карты Google с меняющимися штырьками. Простым способом визуализации этого можно было бы подумать о перекрытии в реальном времени, где контакты постоянно меняются.Как сделать изменчивый ItemizedOverlay

Однако я не могу представить себе безопасный способ сделать это с помощью ItemizedOverlay. Кажется, что проблема заключается в вызове для заполнения. Если size() вызывается каким-то потоком карт, а затем меняются данные, то результатом, когда вызовы карт обращаются к getItem(), может быть исключением IndexOutOfBoundsException.

Может ли кто-нибудь подумать о лучшем решении, кроме перегрузки, заполнить и обернуть super.populate в синхронизированном блоке?

Возможно, мне удастся использовать обычную Overlay? По-видимому, существует Itemized для управления данными для вас, возможно, я делаю фундаментальную ошибку, используя ее?

Спасибо за любую помощь, мой мозг больно!

Hamy

+0

Кажется, у меня возникают трудности с добавлением нескольких элементов наложения в представление карты , Я объявляю свой собственный класс ItemizedOverlay (почти такой же, как в учебнике MapView на сайте dev), но я вижу только первый добавленный маркер. Более подробное описание проблемы находится на http://www.anddev.org/multiple_overlay_items-t12171.html Может ли кто-нибудь помочь мне с этим? Спасибо – Bostjan

ответ

3

как упомянуто в this article

Вы должны вызвать следующие после добавления или удаления элемента из списка.

setLastFocusedIndex (-1);

populate();

Пример:

@Override 
protected OverlayItem createItem(int i) { 
    return overlays.get(i); 
} 
protected void removeOverlay(OverlayItem o){ 
    overlays.remove(o); 
    setLastFocusedIndex(-1); 
    populate(); 
} 
@Override 
public int size() { 
    return overlays.size(); 
} 
public void addOverlay(OverlayItem o){ 
    overlays.add(o); 
    setLastFocusedIndex(-1); 
    populate(); 
} 
0

У меня была аналогичная проблема и решена взаимно исключены (да ... что делает их синхронизировано) метод размер и метод, который обновление (добавление/изменение), pins ... Фактически, первый был вызван bye поток GUI, в то время как второй находится в async-работнике, поэтому возможно, что они называются асинхронно

Смежные вопросы