所以我正在扩展ItemizedOverlay,并使用rest查询向web服务发出异步http请求,在那里我可以获得许多推针的坐标。
一旦处理程序获得异步http请求,我就会执行以下操作(可能不是最佳解决方案 - 即一直清除所有记录)。但我愿意接受建议(因此是帖子)..
基本上这里是代码流(我在一个鳍状肢上有一个列表视图和地图视图,并希望保持它们同步 - 因此是arrayAdapter;
locationRecords.clear(); // ArrayList<LocationRecord>
updateScreen(jArray); // jSONArray jArray
arrayAdapter.notifyDataSetChanged();
updateOverlay();
private synchronized void updateOverlay() {
// Clear the previous overlay of map push pins (don't want to keep adding new overlays)
Iterator<Overlay> listofOverlays = mapView.getOverlays().iterator();
while (listofOverlays.hasNext()) {
Overlay tempOverlay = listofOverlays.next();
if (tempOverlay.getClass().equals(MunzeeOverlay.class)) {
mapView.getOverlays().remove(tempOverlay);
}
this.notify();
}
MyOverlay overlay = new MyOverlay(MapTools.getGreenMarker(mContext),mapView);
Iterator<LocationRecord> mapList = locationRecords.iterator();
while (mapList.hasNext()) {
overlay.addOverlay(mapList.next().getOverlayItem());
}
mapView.getOverlays().add(overlay);
}
protected void updateScreen(JSONArray jArray) {
if ( jArray != null ) {
for ( int i = 0; i < jArray.length(); i++ ) {
try {
JSONObject myArray = jArray.getJSONObject(i);
locationRecords.add(new LocationRecord(myArray,mContext));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
我的想法是在myOverlay上我可以检查当我使用等效检查addOverlay并确保它不存在时,那样我就不需要删除地图上的叠加层了?
我也在updateOverlay中看到一些ConcurrentModificationExceptions(我想这可能不得不以同步的方式清除locationRecords&amp; updatesScreen .. Sooo ..
1)有关提高地图引脚性能的建议,并且在更新叠加层时似乎不会冻结地图
2)有关修复ConcurrentModificationExceptions的任何建议吗?
答案 0 :(得分:1)
有一个带N针的覆盖层。我可以说,你有N个覆盖层,每个覆盖层有一个引脚。这很糟糕。
当您的数据到达时,请在单独覆盖图上调用populate()
让Android重新加载所有标记 - 您无需自行清除任何内容。