Я учусь использовать привязку данных из следующего примера:
https://github.com/ResoCoder/databinding-with-livedata-tutorial
В частности, у меня возникли проблемы со следующим кодом:
В строке № 29 есть тост:
Toast.makeText(это, это, Toast.LENGTH_SHORT).show()
Если editTextContent изменен программно, тост вызывается дважды. Вы можете воспроизвести это поведение, нажав кнопку с надписью: «ВЫБРАТЬ СЛУЧАЙНЫЙ ФРУКТ ИЗ РЕДАКТИРОВАНИЯ».
В этом примере дважды вызывать наблюдателя расточительно, так как всплывающее уведомление отображается дважды, но в моем приложении той же функции это вызывает серьезную проблему для пользователя, поскольку я выполняю разные действия, если данные изменяются программно по сравнению с пользователем.
Я попытался смягчить проблему, пометив состояние как программное изменение, но посторонний второй вызов приходит после завершения моего кода. Вызов выглядит так, как будто пользователь редактирует текст, поэтому моя программа выполняет действие, как если бы пользователь ввел данные. Я не вижу никакого способа определить разницу между посторонним вызовом и вводом данных пользователем.
Пожалуйста, не предлагайте мне спрятать значение записи и, если оно не изменилось, игнорировать посторонний вызов. Существует законный вариант использования, когда пользователь вводит точно такое же значение обратно в поле.
В идеале найти причину постороннего звонка и устранить ее было бы лучше, чем устранить проблему и повысить эффективность. Менее желательным было бы обходное решение, чтобы я мог игнорировать второй вызов, чтобы мой код работал правильно.
Я подозреваю, что это как-то связано с настройкой адаптера или, возможно, когда/где я устанавливаю наблюдателя, но это предположение.
Спасибо.