2012-08-16 53 views
-1

我正在关注this tutorial以创建一些有点不同的东西,本教程展示了叠加层如何与插入到其中的预定义项目一起工作,但是如果我想动态地向其添加项目呢?谷歌地图中的错误?

相反的:那时我必须用一个空覆盖启动

MapView mapView = (MapView) findViewById(R.id.mapview); 
mapView.setBuiltInZoomControls(true); 
List<Overlay> mapOverlays = mapView.getOverlays(); 
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
ItemOverlay itemizedoverlay = new ItemOverlay(drawable, this); 

GeoPoint point = new GeoPoint(19240000,-99120000); 
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 
itemizedoverlay.addOverlay(overlayitem); 

mapOverlays.add(itemizedoverlay); 

其作品就像预期在本教程中,我需要把这个:

MapView mapView = (MapView) findViewById(R.id.mapview); 
mapView.setBuiltInZoomControls(true); 
List<Overlay> mapOverlays = mapView.getOverlays(); 
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
ItemOverlay itemizedoverlay = new ItemOverlay(drawable, this); 
mapOverlays.add(itemizedoverlay); 

这ommits的initializition与项目叠加。

这种方法导致地图卡住,并且在点击几次后,我的应用因为空例外而被踢出。

1.is this expected behavior?这似乎是对我的错误...

2.什么做我为了acheive预期的行为?(我在其中可以用空的覆盖启动和动态添加项目)

,做至于我想达到什么目的,这是不启动覆盖和项目,但动态使用addOverlay,这样我可以

回答

2

据我所知,在ItemOverlay您的意思是ItemizedOverlay。如果是这样,你就走在正确的轨道上。 ItemizedOverlay是地图项目的容器,因此每次您从ItemizedOverlay添加/删除项目时,都需要将上次关注的项目设置为-1,并调用populate()方法来通知地图视图关于内容更改。

只要记住,你需要在在UI线程上下文ItemizedOverlay含量变化;)

这里还有无证伎俩。你需要最后的焦点指标设置为-1populate(),即使你没有项目(所以你需要做的初始化阶段)

所以,你的代码应该是这样的:

MapView mapView = (MapView) findViewById(R.id.mapview); 
mapView.setBuiltInZoomControls(true); 
List<Overlay> mapOverlays = mapView.getOverlays(); 
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
ItemOverlay itemizedoverlay = new ItemOverlay(drawable, this); 
mapOverlays.add(itemizedoverlay); 

setLastFocusedIndex(-1); //reset initial position 
populate(); //notify about our content 


//now try to add new item 
GeoPoint point = new GeoPoint(19240000,-99120000); 
OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 
itemizedoverlay.addOverlay(overlayitem); 
setLastFocusedIndex(-1); //reset initial position 
populate(); //notify about our content 
+0

你其实是对的! setlastfocus是不需要的,我添加了populate()OverlayItem的构造函数,它解决了我的问题!伟大的人感谢! – 2012-08-16 21:36:55