Почему LiveData не восстанавливает исходное состояние пользовательского интерфейса после поворота экрана? - PullRequest
0 голосов
/ 01 июля 2019

Я работаю над приложением и использую компоненты архитектуры Android. У меня есть ViewModel, который я использую для хранения и управления данными пользовательского интерфейса. У меня есть действие, которое отображает список текстовых элементов, которые загружаются из базы данных комнат как LiveData. Представления, содержащие LiveData, доступны для редактирования. По сути, это RecyclerView, содержащий EditTexts.

Что мне интересно, так это сценарий, в котором пользователь меняет одно из значений EditText, а затем происходит что-то, что вызывает перезапуск действия, например, изменение конфигурации. Из того, что я понял, действие создается снова, что означает, что обратный вызов onChanged () снова вызывается, и список заполняется исходными данными LiveData, полученными из базы данных. Из-за этого я ожидал, что EditText (тот, чей текст был отредактирован пользователем) отобразит исходные LiveData, которые были ему назначены до того, как пользователь изменил текст. Однако, когда я повернул экран моего устройства, отредактированный текст остался.

Это то, что я хотел, но я не думал, что это было поведение по умолчанию. Я хотел бы знать, почему отредактированный текст сохранился после изменения конфигурации, поскольку он никогда не сохранялся в базе данных. Это просто специальное свойство EditTexts? Этот пост пользователя описывает нечто подобное, когда их EditTexts сохранили свои самые последние состояния после поворота экрана, когда их TextViews были очищены: Восстановление состояния TextView после поворота экрана?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Рекомендую прочитать ответ . Но да, edittexts будет автоматически обрабатывать состояние по умолчанию. Кроме того, в вашем сценарии liveata не загружал значение снова, потому что база данных не изменилась.

0 голосов
/ 01 июля 2019

Нашел ответ на мой вопрос в этой кодовой метке: https://codelabs.developers.google.com/codelabs/android-lifecycles/#6

Некоторые элементы пользовательского интерфейса, включая EditText, сохраняют свое состояние, используя собственную реализацию onSaveInstanceState.Это состояние восстанавливается после завершения процесса так же, как оно восстанавливается после изменения конфигурации.

...