2011-05-15 44 views
1

我按照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; 
} 

} 

回答

1

不要在每一个addOverlay()电话呼叫populate()。一旦你的ArrayList被填充,请致电populate()Here is a sample project演示了这一点。

+0

嗯...那不适合我 - 对我的项目结构。奇怪的是 - 当我手动填写数组列表时,所有标记都显示正确。但是当我使用我的方法来填充数组列表时 - 哪里是100%确定3项 - 在地图上只显示一个标记。 – user753654 2011-05-15 12:38:26

+0

@CommonsWare这似乎并没有解决我的问题。现在我在手动添加所有项目后调用手动填充。仍然只显示一个项目。 – 2012-02-29 07:57:35