2013-03-27 3 views
4

Я динамически заполняю таблицу из массива строк. Каждая строка таблицы также имеет кнопку «плюс» и «минус», чтобы увеличивать/уменьшать значение одного столбца. Эти кнопки также динамически создаются, как в приведенном ниже коде. Здесь, как я могу определить точную кнопку при нажатии. то есть; если я нажму кнопку «+» второй строки, как я могу получить идентификатор кнопки, нажатой для дальнейшей обработки.Как идентифицировать кнопку, нажатую из динамически сгенерированной таблицы

plusButton= new Button(this); 
minusButton= new Button(this); 
createView(tr, tv1, names[i]); 
createView(tr, tv2, (String)(names[i+1])); 
minusButton.setId(i); 
minusButton.setText("-"); 
minusButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 
plusButton.setId(i); 
plusButton.setText("+"); 
plusButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));` 
+0

Прикрепите обработчик событий и все для этого – IamStalker

ответ

2

Вы можете установить прослушиватель onClickListener для каждой кнопки. Используйте идентификатор кнопки от view.getId() метода по вашему методу onClick(), чтобы идентифицировать нажатие кнопки.

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

minusButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      // Do some operation for minus after getting v.getId() to get the current row 
     } 
    } 
); 

Edit:

Я предполагаю, что ваш код вот так. Исправьте меня, если есть отклонение.

Button minusButton = null; 
for(int i = 0; i < rowCount; i++) 
{ 
    minusButton = new Button(this); 
    minusButton.setId(i); 
    // set other stuff and add to layout 
    minusButton.setOnClickListener(this); 
} 

Пусть ваш класс реализует интерфейс View.OnClickListener и реализовать метод onClick().

public void onClick(View v){ 
    // the text could tell you if its a plus button or minus button 
    // Button btn = (Button) v; 
    // if(btn){ btn.getText();} 
    // getId() should tell you the row number 
    // v.getId() 
} 
+0

Благодарим Вас за отзыв. Но я получаю только последнюю созданную кнопку. то есть. Если есть две строки, тогда будут две минус и плюс кнопки. OnClickListener ловит только щелчок по второй строке. Я поставил точку останова, и только щелчок по второй строке становится пойманным –

+2

Спасибо большое. Это сработало: D –

+0

Добро пожаловать. – midhunhk

0

Вы могли бы сделать с тегами: minusButton.setTag("-") и plusButton.setTag("+").

В вашем clickListener просто получите его с вашей кнопки с помощью view.getTag().

Затем переключитесь между вашими действиями, сравнивая строковый тег.

Редактировать:
ID «должен» быть уникальным. Метод setTag() может помочь вам, если setId() не работает для вас.

+0

Проблема заключается не в идентификации плюса или минуса. Пожалуйста, прочитайте ее еще раз. Я не могу получить идентификатор нажатой кнопки. OnClickListener только прослушивает последнюю кнопку, созданную в динамически заполненной таблице. –

+1

Извините, неверно сформулировал ваш вопрос. В любом случае метод setTag() может помочь вам, если (я не знаю почему) setId() не работает для вас. Кроме того, идентификатор должен быть уникальным. – jila

+0

Да .. Просто осознал это. –

Смежные вопросы