Обозреватель двусторонней привязки данных Android называется дважды - PullRequest
0 голосов
/ 19 марта 2019

Я учусь использовать привязку данных из следующего примера:

https://github.com/ResoCoder/databinding-with-livedata-tutorial

В частности, у меня проблемы со следующим кодом:

https://github.com/ResoCoder/databinding-with-livedata-tutorial/blob/master/app/src/main/java/com/resocoder/databinding/MainActivity.kt

В строке № 29 есть тост:

Toast.makeText (this, it, Toast.LENGTH_SHORT) .show ()

Если editTextContent изменяется программно, тост вызывается дважды. Вы можете воспроизвести это поведение, нажав кнопку с надписью: «ВЫБРАТЬ СЛУЧАЙНЫЕ ФРУКТЫ ИЗ РЕДАКТИРОВАНИЯ»

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

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

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

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

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

Спасибо.

...