【问题标题】:How to make a mutable ItemizedOverlay如何制作可变的 ItemizedOverlay
【发布时间】:2011-01-05 18:41:45
【问题描述】:

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

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

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

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

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

哈米

【问题讨论】:

  • 我似乎在向地图视图中添加多个叠加项目时遇到了困难。我声明了我自己的 ItemizedOverlay 类(与开发网站上的 MapView 教程中的几乎相同),但我只看到添加的第一个标记。更全面的问题描述在anddev.org/multiple_overlay_items-t12171.html 有人能帮我解决这个问题吗?谢谢

标签: android google-maps overlay near-real-time


【解决方案1】:

如中所述 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();
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-08
      • 2011-09-05
      • 2011-01-06
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多