2

我想制作一个带有可变图钉的谷歌地图叠加层。将其可视化的一种简单方法是考虑近乎实时的覆盖,其中引脚不断改变位置。

但是,我似乎想不出使用ItemizedOverlay的安全方法。问题似乎是对填充的调用 - 如果某些地图线程调用了 size(),然后我的数据发生了变化,那么地图调用访问 getItem() 时的结果可能是 IndexOutOfBoundsException。

谁能想到比重载 populate 并将 super.populate 包装在同步块中更好的解决方案?

也许我可以使用普通的覆盖获得更好的运气?Itemized 似乎存在为您管理数据,也许我在使用它时犯了一个根本错误?

感谢您的帮助,我的大脑正在受伤!

哈米

4

2 回答 2

3

本文所述

在列表中添加或删除项目后,您需要调用以下命令。

setLastFocusedIndex(-1);

填充();

例子:

@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();
}
于 2010-08-11T15:53:16.263 回答
0

我有一个类似的问题,并通过相互排除(是的......使它们同步)方法大小更新(添加/更改)引脚的方法来解决......事实上,第一个是通过 GUI 线程调用的,而第二个在异步工作者中,因此它们可能被异步调用

于 2011-01-03T13:49:08.237 回答