我想要什么:中的AsyncTask添加覆盖项目以OSMDroid地图
我想在user's当前位置10个标志和地图,加载后在加载的AsyncTask从数据库地图。
什么doenst工作
一切工作正常,除了10个额外的标记。我从DB加载它们,将它们添加到OverlayItems列表中,并使地图无效 - 它们仍未显示。
更新:现在工作:通过在之后创建ItemizedIconOverlay ,将其他项目加载到AsyncTask中,将显示项目并按照要求工作。
此外,OverlayItem列表初始化为零对象(显然),但是在添加一个OverlayItem之后,它包含1个OverlayItem + 11个更多的null-Objects(或null-Refernces?null-Items?什么是正确的称呼)
我的问题
1)@ OverlayItems列表:?加载一切之后,还有一个空的对象,我想这可能会造成问题,但它没有。 (测试完整列表,没有区别)
为什么列表初始化为零项,但是当我添加一个时,它包含12个项目? (11空,1“真正的”项目)(下面的代码)
2)[解决]据我知道,如果我添加OverlayItems到列表和无效的地图,他们应该显示。如果我将项目添加到第二个列表中,并用第二个“覆盖”第一个项目,它是否仍然有效? (由于it's不是同一个对象了,但仅仅是一个参考,以列表2,对不对?)
更新:后通过创建ItemizedIconOverlay 加载在的AsyncTask其他项目的项目显示和工作为inteded。
全码
创建地图
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
mapView.setTileSource(TileSourceFactory.MAPNIK);
mapView.setBuiltInZoomControls(true);
mapView.setMultiTouchControls(true);
mapController = this.mapView.getController();
mapController.setZoom(25);
GeoPoint center = new GeoPoint(DataManager.glat, DataManager.glon);
mapController.setCenter(center);
// items = null
items = new ArrayList<OverlayItem>(); // items is still empty
items.add(new OverlayItem("Here", "SampleDescription", center));
// now, items contains one OverlayItem, but also 11 empty (null) Items
this.mLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index,
final OverlayItem item) {
Intent intent=new Intent();
intent.putExtra("newShopName", item.mTitle);
intent.putExtra("newShopAdd", item.mDescription);
setResult(RESULT_OK, intent);
finish();
return true;
}
@Override
public boolean onItemLongPress(final int index,
final OverlayItem item) {
toast = Toast.makeText(ShopChooseActivity.this, item.mTitle + ", " + item.mDescription, Toast.LENGTH_LONG);
toast.show();
return false;
}
}, mResourceProxy);
this.mapView.getOverlays().add(this.mLocationOverlay);
mapView.invalidate();
loadMap = new LoadChooseShop(ShopChooseActivity.this, items).execute();
从AsynTask更新与OverlayItems的新列表中的项目
items = loadMap.get();
if(items != null)
mapView.invalidate();
@ 1)我已经解决了这个问题,在您的帮助[这里](http://stackoverflow.com/问题/ 17566421/osmdroid-crashes-when-zooming-out),忘记编辑问题 @ 2)好的解释 –