我想让一个谷歌地图与可变的引脚覆盖。可视化这一点的一种简单方法是考虑近乎实时的覆盖,其中引脚不断地改变位置。
然而,我似乎想不出一种安全的方法来使用ItemizedOverlay来做这件事。问题似乎出在填充的调用上--如果某个映射线程调用了size(),然后我的数据发生了变化,那么当映射调用访问getItem()时,结果可能是一个IndexOutOfBoundsException。
有谁能想到比重载填充并将super.populate包装在同步块中更好的解决方案吗?
也许我可以使用普通的覆盖来获得更好的运气?分项数据的存在似乎是为了为您管理数据,也许我使用它是犯了一个根本性的错误?
谢谢你的帮助,我的大脑很痛!
哈米
发布于 2010-08-11 23:53:16
正如在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();
}发布于 2011-01-03 21:49:08
我也有类似的问题,通过相互排除来解决(是的……使它们同步)方法大小和更新(添加/更改)管脚的方法...实际上,第一个是通过GUI线程调用的,而第二个是在异步工作线程中调用的,因此可以异步调用它们
https://stackoverflow.com/questions/2076176
复制相似问题