Доброго времени суток.
Есть MainActivity реализующая интерфейс View.OnClickListener, соответственно есть метод OnClick типа такого:
public void onClick(View v) {
if (v.getId()==R.id.btnDel){ //Кнопка Удалить
Button btnDel = (Button) v;
btnDel.setText("Отмена");
btnDel.setOnClickListener(oclBtnDelWhileDel);
Выше по коду я создаю oclBtnDelWhileDel таким:
View.OnClickListener oclBtnDelWhileDel = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button btnDel = (Button) v;
btnDel.setText("Удалить");
btnDel.setOnClickListener(this);
}
} ;
Идея в том что метод OnClick класса назначает кнопке слушателя oclBtnDelWhileDel, а oclBtnDelWhileDel назначает слушателем обратно метод OnClick
Проблема в том, что при первом нажатии на кнопку, она меняет название на "Отмена" и назначается слушатель oclBtnDelWhileDel.
А вот при втором нажатии на кнопку название меняется на "Удалить", а вот слушатель обратно не меняется.
Через дебаггер выполняется опять код oclBtnDelWhileDel.
Вопрос: не могу понять, почему?.
Ответ
OnClickListener "прикрепляется" к определенной кнопке, и реализует метод обратного вызова (Callback), проще говоря, когда вы нажимаете на кнопку - происходит некоторое действие.
Конкретно в вашей реализации очень много некрасивых мест, начиная с объявления кнопки при нажатии на другую кнопку - заканчивая установлением слушателя кнопки внутри реализации onClick другой кнопки.
Вы можете просто менять динамически текст на кнопке, и выполнять тот, или иной функционал, допустим:
if(btn.getText().equals("Удалить")){
// происходит операция удаления
} else {
//операция отмены.
}
Написано на коленке, и вероятно, ответ выше помог более по теме, но и этим не пренебрегайте.
Зарефакторите код, станет легче.
Комментариев нет:
Отправить комментарий