2011-05-15 43 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