Динамическое добавление кнопок в Android не работает после добавления первой кнопки - PullRequest
0 голосов
/ 29 августа 2011

У меня есть кнопка, созданная в коде, в которой есть прослушиватель событий Click.Каждый раз, когда нажимается эта кнопка, она должна генерировать еще одну кнопку и добавлять ее под исходной кнопкой.Однако, независимо от того, сколько раз я нажму первую кнопку, она добавит динамическую кнопку только один раз и больше не будет добавляться.

Вот мое кодирование:

public class DynaminControlActivity extends Activity {
    private RelativeLayout container;
    private int mainIdCnt = 0;
    private int mainId = 100;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        createMainButton();
    }

    public void createMainButton() {
        container = (RelativeLayout) findViewById(R.id.workLayout);
        Button b = new Button(this);
        b.setId(mainIdCnt + mainId);
        CharSequence text = "Main +";
        b.setText(text);
        container.addView(b);
        if (mainId > 0) {
            mainId++;
        }
        b.setOnClickListener((new View.OnClickListener() {
            public void onClick(View v) {
                createDynamicButton();
            }
        }));
    }

    public void createDynamicButton() {
        container = (RelativeLayout) findViewById(R.id.workLayout);
        Button b = new Button(this);
        CharSequence text = "Main +";
        b.setText(text);
        RelativeLayout.LayoutParams relLayout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        relLayout.addRule(RelativeLayout.BELOW, mainIdCnt + mainId);
        container.addView(b, relLayout);
        if (mainId > 0) {
            mainId++;
        }
    }

1 Ответ

0 голосов
/ 29 марта 2012

Несколько вещей ...

  1. Если ваш основной макет - LinearLayout, вам не нужно добавлять правило, указывающее, что кнопка должна отображаться под существующей кнопкой - она ​​будет автоматически добавлена ​​к самому низу (вертикальное выравнивание) или очень вправо (горизонтальное выравнивание) макета.

  2. Все ваши кнопки имеют одинаковый текст. Вы уверены, что нажимаете первую кнопку каждый раз? Отмечу, что только у вашей первой кнопки есть слушатель, поэтому, если вы случайно нажмете одну из других кнопок, ничего не произойдет.

  3. Если вы намереваетесь добавить несколько кнопок, они быстро расширятся до размера, превышающего размер экрана, поэтому вы должны убедиться, что ваш основной макет находится в ScrollView, чтобы вы могли видеть все кнопки, которые вы добавить

  4. Вызов setId () может быть связан с внутренней работой Android. Вместо того, чтобы устанавливать идентификатор, вы должны позволить Android автоматически сгенерировать идентификатор и просто получить это значение, если вам нужно сослаться на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...