0

我正在尝试ItemizedOverylay在 Nexus One 上的 Google 地图(Android 2.1)上创建动态(请参阅下面的代码)。

在我的Activity(扩展 MapActivity)中,我正在创建一个从网络接收数据的数据线程。“处理程序”用于将数据从接收线程传递到映射活动。此数据包含我要在地图上叠加的标记的位置(纬度、经度)。每个标记的位置是动态的(即,每次我从网络接收到新数据时它都会改变。) refreshItems(ArrayList<OverlayItem> newItems)在处理程序内部调用的方法handleMessage()。ArrayList 中有大约 11 个标记被传递给refreshItems

我可以看到地图上覆盖的标记。但是,我有两个问题:

  1. 旧标记不会从地图中删除。过了一会儿,我看到了一串标记。

  2. 地图不响应任何触摸命令。我无法移动地图或放大或缩小。过了一会儿,我看到一条系统警告,提示我的应用程序没有响应(等待/关闭?)消息。

知道这里有什么问题吗?

谢谢。

    public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

private ArrayList<OverlayItem> overlayItems;

public CoTItemizedOverlay(Drawable defaultMarker) {
    super(boundCenter(defaultMarker));
    overlayItems = new ArrayList<OverlayItem>();
    populate();
}

public void addNewItem(GeoPoint location, String markerText, String snippet) {
    overlayItems.add(new OverlayItem(location, markerText, snippet));
    populate();
}

public void removeItem(int index) {
    overlayItems.remove(index);
    populate();
}

public void refreshItems(ArrayList<OverlayItem> newItems) {
    // remove all existing items
    for (int i = 0; i < cotoverlayItems.size(); i++) {
        overlayItems.remove(i);
    }

    // copy all the items
    if (newItems != null && cotoverlayItems.size() == 0) {
        overlayItems.addAll(newItems);
    }

    populate();
}

@Override
protected OverlayItem createItem(int index) {
    return overlayItems.get(index);
}

@Override
public int size() {
    return overlayItems.size();
}

}

4

2 回答 2

0

您正在到处调用填充。阅读此主题: Android 地图性能差,因为很多叠加层?

这也是旧标记不会消失的原因。

于 2010-05-07T04:09:04.473 回答
0

试试这个:

-- 在获取和显示新标记之前清除所有旧标记

YourMapOverlay mapOverLay = mapView.getOverlays();
mapOverlay.clear();
于 2012-03-27T10:17:34.427 回答