Динамическое отображение кнопок программно для Android

Я хочу добавить кнопки программно на экране, и я получаю значение, анализируя API и теперь я хочу отобразить кнопки в соответствии с длиной массива. Я делаю это, но у меня отображается только последняя кнопка, но внутри for цикл Я получаю все значения правильно, но отображается только последняя кнопка. Это мой код:

RelativeLayout relate;

//...
relate = (RelativeLayout)findViewById(R.id.relative);

      protected void onPostExecute(Void result) {
      if(dialog.isShowing() == true) {
      dialog.dismiss();
     }

    //int width = 100, height =50, x = 10, y = 20;

    for (int i =0;i<adapt_obj.city_name_array.length;i++){
        b1 = new Button(myref);

        b1.setText(adapt_obj.city_name_array[i]);

    relate.addView(b1);


    //relate.addView(b1, i,  new RelativeLayout.LayoutParams(width,height));

    //height = height+80;

    }

    listlocation.setAdapter(adapt_obj);
    adapt_obj.notifyDataSetChanged();
    }

3 ответа

Решение

RelativeLayout будет складывать представления, которые вы добавляете к нему, в верхний угол, если вы не укажете некоторые правила размещения. Ваши кнопки добавляются в макет, но они располагаются друг над другом, поэтому видна только последняя добавленная вами. Вот некоторые модификации вашего for цикл:

RelativeLayout relate; relate = (RelativeLayout)findViewById(R.id.relative);
for (int i = 0; i < adapt_obj.city_name_array.length; i++){
    Button b1 = new Button(myref);
    b1.setId(100 + i);
    b1.setText(adapt_obj.city_name_array[i]);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    if (i > 0) {
        lp.addRule(RelativeLayout.BELOW, b1.getId() - 1);
    }   
    b1.setLayoutParams(lp);
    relate.addView(b1);
}

Вы не должны давать значения x и y в Android. Вы можете добавить нижний левый верхний угол элемента. Также параметры макета вы должны использовать wrap_content или fill_parent.

    Button button = new Button(this);
    button.setText(@"text");
    button.setLayoutParams(new LayoutParams(WRAP_CONTENT,WRAP_CONTENT));
    layout.addView(button);

Я думаю, что проблема с относительным расположением. Ваши кнопки могут быть наложены друг на друга. Попробуйте сделать родительский план линейным.

Другие вопросы по тегам