我按照Google Dev上的教程创建ItemSizedOverlay。我的想法是从一个名为列表的ArrayList中获取多个位置。所以我用一个for()来读出ArrayList列表,并将位置添加到ItemSizedOverlay,名为PowerStationOverlay - 但奇怪的是,这给我只有我的列表的第一个条目 - 其他没有显示在地图上...ItemizedOverlay仅显示FIRST ENTRY
Id我读的静态位置就像在教程中 - 它工作正常,但是当我通过ArrayList和for()应该遍历它的位置读取 - 然后它不工作。
我很困惑,我不明白这个 - 什么是错的?
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.powerstation);
MapView mapView = (MapView) findViewById(R.id.mapview);
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
PowerStationOverlay itemizedoverlay = new PowerStationOverlay(drawable);
ArrayList<locations.PowerStation> list = new ArrayList<locations.PowerStation>();
list = myDbHelper.getPowerStations();
int countPowerStations = list.size();
GeoPoint gp;
for(locations.PowerStation ps : list){
int lat = (int) ps.getLat();
int lon = (int) ps.getLon();
gp = new GeoPoint(lat, lon);
itemizedoverlay.addOverlay(new OverlayItem(gp, "Test", "Test"));
}
mapOverlays.add(itemizedoverlay);
}
这里是ItemSizedOverlay称为PowerStationOverlay。
public class PowerStationOverlay extends ItemizedOverlay<OverlayItem>
{
Context mContext;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
public PowerStationOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public PowerStationOverlay(Drawable defaultMarker, Context context) {
super(defaultMarker);
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
return true;
}
}
嗯...那不适合我 - 对我的项目结构。奇怪的是 - 当我手动填写数组列表时,所有标记都显示正确。但是当我使用我的方法来填充数组列表时 - 哪里是100%确定3项 - 在地图上只显示一个标记。 – user753654 2011-05-15 12:38:26
@CommonsWare这似乎并没有解决我的问题。现在我在手动添加所有项目后调用手动填充。仍然只显示一个项目。 – 2012-02-29 07:57:35