我想用可更换的针脚制作谷歌地图覆盖图。一种可视化的简单方法是考虑近实时覆盖,其中引脚不断改变位置。
但是,我似乎无法用ItemizedOverlay来考虑一种安全的方法。问题似乎是对populate的调用 - 如果某些map线程调用了size(),然后我的数据发生了变化,那么map调用访问getItem()时的结果可能是IndexOutOfBoundsException。
有人能想到一个更好的解决方案,而不是在同步块中重载populate和wrap super.populate吗?
也许我可以使用正常叠加获得更好的运气?似乎存在分项管理数据,或许我通过使用它来犯一个根本性的错误?
感谢您的帮助,我的大脑正在受伤!
Hamy
答案 0 :(得分:3)
如上所述 this article
在列表中添加或删除项目后,您需要调用以下内容。
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();
}
答案 1 :(得分:0)
我有一个类似的问题,并通过相互排除(是的......使它们同步)解决方法 size 和更新(添加/更改)方法销... 实际上,第一个被称为GUI线程,而第二个是异步工作者,所以它们可能是异步调用的