Android слушатель изменения переменной

Как создать собственный слушатель для переменной Android?

Я пытаюсь создать пользовательский прослушиватель для переменной, которая постоянно меняется, и хочу отслеживать ее и обновлять мой дисплей (TextView) каждый раз, когда регистрируется изменение. Я взял ссылку из Android, как я могу действовать при изменении переменной? Но это работает только один раз. Я хочу, чтобы он постоянно отслеживал изменения и обновлял отображение при изменении состояния.

2 ответа

Я могу придумать много способов сделать это, но я думаю, что самый простой из них — просто создать оболочку переменной, которую вы не хотите «слушать», реализовать метод получения и установки и, конечно, интерфейс слушателя. Предположим, вы хотите «прослушать» переменную int:

Тогда вы просто используете это:

Каждый раз, когда вы меняете значение (с помощью Set(. )), слушатель, если не ноль, будет вызываться:

Другой вариант, который вы можете использовать, возможно, более сложный, — это создание службы ( http://developer.android.com/guide/components/services.html).

По сути, вы создаете «действие» в фоновом режиме, где вы создаете цикл, который регулярно проверяет, изменилась ли переменная или нет значение (для этого вам нужно создать открытый метод в вашей деятельности), если переменная имеет изменить вы можете сделать действие.

Для меня другой вариант, предложенный здесь, звучит более разумно для меня, но вы упомянули, что он не работает для вас.

Источник

Android: прослушивание переменных изменений

Я искал пример KISS, как это сделать, и пока все они кажутся (и я прошел через них ВСЕ!) достаточно простыми, я все еще не могу понять свою концепцию. Я имею в виду пользовательские слушатели (те, которые не распространяются). В частности, создание слушателя для логической переменной, чтобы я мог отличать некоторые методы при изменении значения.

Если у кого-то есть время, чтобы объяснить пользовательский слушатель и как он работает на простом английском языке, это было бы высоко оценено. Я надеюсь, что как только я точно пойму, как слушатель будет уведомлен об изменении, тогда я смогу создать свою собственную и понять, как это чертовски работает. Это дает мне головную боль. Спасибо заранее

Вот где я сейчас нахожусь:

Это снимок моей основной деятельности:

Теперь, когда начинается действие, Toast отображает состояние boo. отлично. Проблема в том, что это происходит только внутри onCreate, что имеет смысл, так как там помещается .somethingChanged. Я хотел бы, чтобы Toast генерировался каждый раз, когда boo изменен с false на true и true на false, независимо от того, находится ли он внутри onCreate или нет. То есть:

  • Нажмите кнопку
  • Приводит boo к изменению с false на true
  • Слушатель выбирает изменения и запускает все, что находится в onChange
Читайте также:  Что отвечает за камеру андроид

Я знаю, что могу просто использовать кнопку actionListener, чтобы сделать это, но я хотел бы держаться подальше от этого, если это возможно, что на момент, когда я начинаю думать, невозможно.

Любое понимание было бы очень оценено. Спасибо заранее!

ОТВЕТЫ

Ответ 1

Вы переносите переменную внутри пользовательского класса, так что только функции доступа также отключают прослушиватель. Так что единственный способ перевернуть переключатель — это функции, которые переключают и вызывают прослушиватель.

Чтобы отслеживать изменение, вам необходимо реализовать BooVariable.ChangeListener, а затем передать классу BooVariable копию «this», а затем, когда вы измените переменную, которую она вызывает, измените.

Кроме того, имея в виду, вы можете просто вставить код, а не напрямую:

PS. Тост должен быть вызван из потока пользовательского интерфейса, поэтому вам нужно переключить Looper, если вы собираетесь изменить переменную в другом потоке. Вероятно, это не произойдет.

Источник

Android: прослушивание переменных изменений

Я искал пример KISS, как это сделать, и пока все они кажутся (и я прошел через них ВСЕ!) достаточно простыми, я все еще не могу понять свою концепцию. Я имею в виду пользовательские слушатели (те, которые не распространяются). В частности, создание слушателя для логической переменной, чтобы я мог отличать некоторые методы при изменении значения.

Если у кого-то есть время, чтобы объяснить пользовательский слушатель и как он работает на простом английском языке, это было бы высоко оценено. Я надеюсь, что как только я точно пойму, как слушатель будет уведомлен об изменении, тогда я смогу создать свою собственную и понять, как это чертовски работает. Это дает мне головную боль. Спасибо заранее

Вот где я сейчас нахожусь:

Это снимок моей основной деятельности:

Теперь, когда начинается действие, Toast отображает состояние boo. отлично. Проблема в том, что это происходит только внутри onCreate, что имеет смысл, так как там помещается .somethingChanged. Я хотел бы, чтобы Toast генерировался каждый раз, когда boo изменен с false на true и true на false, независимо от того, находится ли он внутри onCreate или нет. То есть:

  • Нажмите кнопку
  • Приводит boo к изменению с false на true
  • Слушатель выбирает изменения и запускает все, что находится в onChange
Читайте также:  Control android tv box from android phone

Я знаю, что могу просто использовать кнопку actionListener, чтобы сделать это, но я хотел бы держаться подальше от этого, если это возможно, что на момент, когда я начинаю думать, невозможно.

Любое понимание было бы очень оценено. Спасибо заранее!

ОТВЕТЫ

Ответ 1

Вы переносите переменную внутри пользовательского класса, так что только функции доступа также отключают прослушиватель. Так что единственный способ перевернуть переключатель — это функции, которые переключают и вызывают прослушиватель.

Чтобы отслеживать изменение, вам необходимо реализовать BooVariable.ChangeListener, а затем передать классу BooVariable копию «this», а затем, когда вы измените переменную, которую она вызывает, измените.

Кроме того, имея в виду, вы можете просто вставить код, а не напрямую:

PS. Тост должен быть вызван из потока пользовательского интерфейса, поэтому вам нужно переключить Looper, если вы собираетесь изменить переменную в другом потоке. Вероятно, это не произойдет.

Источник

Android на слушателя изменения текста

У меня есть ситуация, когда есть два поля. field1 и field2 . Все, что я хочу сделать, это пусто, field2 когда field1 меняется, и наоборот. Таким образом, в конце только одно поле имеет содержимое.

Он отлично работает , если я прилагаю addTextChangedListener к field1 только, но когда я делаю это для обоих полей приложение падает. Очевидно, потому что они пытаются изменить друг друга на неопределенный срок. Как только field1 изменения, которые он очищает, field2 в этот момент field2 изменяются, поэтому он очищается field1 и так далее .

Может кто-нибудь предложить какое-нибудь решение?

Вы можете добавить флажок, чтобы очистить только тогда, когда текст в поле не является пустым (т. Е. Когда длина отличается от 0).

Документация для TextWatcher здесь .

Также, пожалуйста, соблюдайте правила именования .

Я знаю, что это старо, но кто-то может когда-нибудь столкнуться с этим снова.

У меня была похожая проблема, когда я вызывал setText для EditText, а onTextChanged вызывался, когда я этого не хотел. Моим первым решением было написать некоторый код после вызова setText (), чтобы отменить ущерб, нанесенный слушателем. Но это было не очень элегантно. Проведя некоторые исследования и тестирование, я обнаружил, что использование getText (). Clear () очищает текст почти так же, как setText («»), но, поскольку он не устанавливает текст, слушатель не вызывается, так что решил мою проблему. Я переключил все мои вызовы setText («») на getText (). Clear (), и мне больше не нужны повязки, так что, возможно, это тоже решит вашу проблему.

Читайте также:  Android engineer mode all

Источник

Android: прослушивание переменных изменений

Я искал пример KISS, как это сделать, и, хотя все они кажутся (и я прошел через них ВСЕ!) Достаточно просты, я все еще не могу понять свою концепцию. Я имею в виду пользовательские слушатели (те, которые не распространяют ничего) … В частности, создание слушателя для логической переменной, чтобы я мог отличать некоторые методы при изменении его значения.

Это пример примера, который я пробовал: android, как заставить прослушиватель настраивать переменную?

Если у кого-то есть время, чтобы объяснить пользовательский слушатель и как он работает на простом английском языке, это было бы очень оценено. Я надеюсь, что как только я точно пойму, как слушатель будет уведомлен об изменении, тогда я смогу создать свое собственное и понять, как это чертовски работает. Это дает мне головную боль … Спасибо заранее

Вот где я сейчас нахожусь:

Это снимок моей основной деятельности:

Теперь, когда начинается действие, Toast отображает состояние boo … отлично. Проблема в том, что это происходит только внутри onCreate, что имеет смысл, так как там помещается .somethingChanged. Я бы хотел, чтобы Toast генерировался каждый раз, когда boo изменен с false на true и true на false, независимо от того, находится ли он внутри onCreate или нет. То есть:

  • Нажмите кнопку
  • Заставляет boo изменять значение с false на true
  • Слушатель выбирает изменения и запускает все, что находится в onChange

Я знаю, что могу просто использовать кнопку actionListener для этого, но я хотел бы держаться подальше от этого, если это возможно, что в настоящий момент я начинаю думать, это невозможно.

Любое понимание было бы высоко оценено. Заранее спасибо!

Вы переносите переменную внутри пользовательского класса, так что только функции доступа также отключают слушателя. Так что единственный способ перевернуть переключатель – это функции, которые переключают и вызывают прослушиватель.

Чтобы отслеживать изменение, вам нужно реализовать BooVariable.ChangeListener, а затем передать классу BooVariable копию «this», а затем, когда вы измените переменную, которую он вызывает в элементе «Изменить».

Кроме того, имея в виду, вы можете просто вставить код, а не напрямую:

PS. Тост должен быть вызван из потока пользовательского интерфейса, поэтому вам нужно переключить Looper, если вы собираетесь изменить переменную в другом потоке. Скорее всего, это не произойдет.

Источник

Оцените статью