Почему метод выполняется после его завершения

161
08 августа 2021, 20:40

Вопрос возник из-за того, что в методе chooseButton было несколько buttonListener, а при вызове одной из них, менялась boolean переменная и цвет Одной кнопки, потом программа должна была выйти из метода и напечатать End. Но случилось так, что программа прошла полностью метод chooseButton напечатала End, а когда я решил нажать на кнопки, то они обе поменяли свой цвет, хотя должна менять цвет лишь одна, и сработал вывод сообщения, хотя по-идее метод уже выполнился.

Answer 1

Так происходит потому, что слушатель кликов OnClickListener вызывается системой и срабатывает по событию нажатия кнопки. После того, как вы привязали слушатель к виджету методом setOnClickListener() он будет срабатывать при каждом нажатии на виджет. Это никак не зависит от завершения вашего собственного метода и будет действовать, пока виджет, к которому привязан слушатель находится на экране (и вы можете на него нажать), либо слушатель не будет явно отключен от этого виджета.

Если вы хотите, чтобы при завершении вашего метода кнопки перестали реагировать на клики, нужно отвязать от них слушатели кликов:

buttonA.setOnClickListener(null);
READ ALSO
Как зафиксировать размеры окна в Java

Как зафиксировать размеры окна в Java

При использовании менеджера компоновки FlowLayout можно удобно разместить элементы интерфейса в заданных размерах фреймаОднако, если в процессе...

389
Помогите понять работу return

Помогите понять работу return

Хотел бы понять как работает return, в принципе я понимаю как он работаетНо встал вопрос, в примере ниже я запускаю метод с пустым массивом, в методе...

105
Правильно ли так изменять state?

Правильно ли так изменять state?

У меня есть массив объектов, у них нет точного распорядка и идентификации , но мне нужно найти объект с определенным id и изменить в нем свойство...

177
Redux вопрос архитектуры

Redux вопрос архитектуры

Я осваиваю веб разработку и у меня созрел вопрос:

105