我正在尝试ItemizedOverylay
在 Nexus One 上的 Google 地图(Android 2.1)上创建动态(请参阅下面的代码)。
在我的Activity
(扩展 MapActivity)中,我正在创建一个从网络接收数据的数据线程。“处理程序”用于将数据从接收线程传递到映射活动。此数据包含我要在地图上叠加的标记的位置(纬度、经度)。每个标记的位置是动态的(即,每次我从网络接收到新数据时它都会改变。) refreshItems(ArrayList<OverlayItem> newItems)
在处理程序内部调用的方法handleMessage()
。ArrayList 中有大约 11 个标记被传递给refreshItems
我可以看到地图上覆盖的标记。但是,我有两个问题:
旧标记不会从地图中删除。过了一会儿,我看到了一串标记。
地图不响应任何触摸命令。我无法移动地图或放大或缩小。过了一会儿,我看到一条系统警告,提示我的应用程序没有响应(等待/关闭?)消息。
知道这里有什么问题吗?
谢谢。
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();
}
}