Android: знать, какая кнопка нажата для кнопок, которые создаются программно - PullRequest
1 голос
/ 10 сентября 2011

Я пытаюсь сделать это:

Программно создать 4 кнопки на макете.Затем создайте прослушиватель onclick для каждой кнопки.Затем, в зависимости от того, какая кнопка нажата, будет работать некоторая логика.

Я создал LinearLayout в своем XML-файле и назвал его "layout".

Итак, мои коды выглядят примерно так:

    layout = (LinearLayout)findViewById(R.id.layout);

    //Create the array of buttons
    Button [] subjectButtons_BT = new Button[4];

    for(int i=0; i<4; i++){
        subjectButtons_BT[i] = new Button(this);
        // Add the button to the layout
        layout.addView(subjectButtons_BT[i]);
        subjectButtons_BT[i].setOnClickListener(new Button.OnClickListener() {
                public void onClick(View v) {
               // if it is the first button, do LOGIC1
               // if it is the second button, do LOGIC2 etc 
                }
        });
    }

До сих пор мне удалось создать 4 кнопки, и я могу нажимать на кнопки.Тем не менее, я не знаю, как с логикой в ​​части setOnClickListener.

Я хотел знать, какая кнопка нажата.Итак, я попытался использовать v.getId (), но он всегда возвращает -1.

Может кто-нибудь посоветовать, если это правильный путь?И если да, то как сделать логику?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

У вас есть две опции для определения, какая динамическая кнопка нажата.

 1) Set ID to the button and compare ID 
 2) Set Tag to the button if you have come more information about button
     and want to access it

1) Вы можете установить идентификатор для кнопки, а в методе onClick() вы можете получить идентификатор методом button.getId(), и выможете сравнивать идентификаторы и выполнять действия в соответствии с кликом.

2) Если вы установите тег, вы должны получить тег, вызвав метод button.getTag(), и таким образом вы можете передать объект кнопкой

0 голосов
/ 10 сентября 2011

Вы можете установить идентификатор кнопок после их создания, а затем проверить этот идентификатор в OnClickListener

layout = (LinearLayout)findViewById(R.id.layout);

//Create the array of buttons
Button [] subjectButtons_BT = new Button[4];

for(int i=0; i<4; i++){
    subjectButtons_BT[i] = new Button(this);
    subjectButtons_BT[i].setId(i);
    // Add the button to the layout
    layout.addView(subjectButtons_BT[i]);
    subjectButtons_BT[i].setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                int id = v.getId();
                if (id == 0) {
                } else if (id == 1) {
                }
                //etc.
            }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...