Ну, это довольно загруженный вопрос, лол. Итак, начнем с нескольких моментов.
Во-первых, вы, конечно, можете управлять своим собственным изменением жизненного цикла, если вы решите НЕ разрешать Android сбрасывать ваш жизненный цикл при смене устройства.
android:configChanges="orientation"
Используйте этот флаг в своем манифесте, если хотите сохранить все и обработать свои собственные изменения ротации. Однако, если у вас есть папка layout-land с разными XML-файлами, вам не нужно этого делать.
Да, конечно, вы можете сделать fragment.retainInstance, когда он вложен в Activity, чтобы сохранить значения. Тем не менее, сохранение заполненных элементов со значениями — это не то, что вы можете просто ожидать от него, поскольку элементы пользовательского интерфейса были полностью перерисованы, поэтому что-то должно сказать ему перерисовать его снова.
Итак, если вы придерживаетесь старой школы и на самом деле все еще используете findViewById и myText.setText('some Stuff'). Тогда вы можете сэкономить время, используя такую библиотеку, как icepick.
https://github.com/frankiesardo/icepick
Тем не менее, ЛУЧШИЙ вариант — это модернизировать свою практику кодирования, чтобы использовать DataBinding. Это позволяет вам больше не заботиться о взаимодействиях с пользовательским интерфейсом, поскольку значения по умолчанию привязаны к вашим значениям Fragment, Activity или Model и могут быть выполнены с двусторонней привязкой. Это гарантирует, что привязка данных всегда заполняется последним обновленным значением.
Представьте, что у вас есть объект
public class Student implements BaseObservable{
String firstName;
}
Тогда в вашем xml у вас есть
editText
android:text="@={student.firstName}"
Очевидно, что есть еще кое-что, например, вам нужно установить объект ученика в onCreate, чтобы убедиться, что он находится в XML для использования. Но когда пользователь изменяет имя учащегося, оно сохраняется в модели и автоматически перерисовывается в текст редактирования.
Это ваше лучшее решение, но зависит от того, насколько вы инвестируете в будущие методы связывания разработки Android или предпочитаете ли вы просто придерживаться статус-кво, чтобы пересечь финишную черту.
Надеюсь, это поможет.
person
Sam
schedule
01.12.2017