ItemizedOverlay показывает только первый вход

1

i после учебного пособия Google Dev создал ItemSizedOverlay. Моя идея состоит в том, чтобы получить несколько позиций из ArrayList с именем list. Поэтому я использовал for() для чтения списка ArrayList и добавил позиции в ItemSizedOverlay, называемый PowerStationOverlay, но странно, что это дает мне только первую запись моего списка - другие не отображаются на карте...

Id Я читаю статические позиции, как в учебнике - он работает нормально, но когда я читаю в позициях через ArrayList и for(), которые должны перебирать его, тогда он не работает.

Я смущен, я не понимаю этого - что не так?

protected void onCreate (Bundle 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;
}

}
Теги:
arraylist
dynamic

1 ответ

1

Не вызывайте populate() для каждого вызова addOverlay(). Вызовите populate() после заполнения вашего ArrayList. Вот пример проекта, демонстрирующий это.

  • 0
    хм ... это не работает для меня - для моей структуры проекта. странная вещь - когда я заполняю массив вручную, все метки отображаются правильно. но когда я использую мой метод для заполнения массива - где 100% точно 3 элемента - на карте отображается только один маркер.
  • 0
    @ CommonsWare Это, кажется, не решает проблему для меня. Теперь я звоню заполнить вручную, как только у меня есть все элементы, добавленные. По-прежнему отображается только один элемент.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню