Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Назначение OnClickListener

Доброго времени суток.
Есть 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 {
//операция отмены.
}
Написано на коленке, и вероятно, ответ выше помог более по теме, но и этим не пренебрегайте.
Зарефакторите код, станет легче.

Комментариев нет:

Отправить комментарий