свойство lateinit не инициализируется при восстановлении активности

В моей деятельности у меня есть свойство lateinit называемое controller которое использует мой Фрагмент. Это свойство инициализируется в Activity.onCreate() . Мой Fragment возвращает ссылку на мою Activity через onAttach() . Затем Fragment вызывает myActivity.controller в Fragment.onCreate() .

Обычно controller сначала инициализируется в Activity.onCreate() , после чего добавляется Fragment . Так что это работает отлично.

Но когда моя Activity была убита, она пытается воссоздать себя и свои фрагменты. Это вызывает вызов Fragment.onCreate() до инициализации в Activity.onCreate() .

Это варианты, которые я вижу прямо сейчас:

  • инициализировать controller до super.onCreate() (если это возможно)
  • переместите вызов myActivity.controller на последующий обратный вызов жизненного цикла, например onViewCreated()
  • что-то с ::controller.isInitialized доступно в Kotlin 1.2

Какой у меня лучший вариант?

Просмотрев жизненный цикл Fragment , на самом деле самым безопасным пунктом для этого будет #onActivityCreated(android.os.Bundle) .

Даже когда #onAttach() выглядит так, как он вызывается, когда Fragment привязан к Activity , я не уверен, что это полностью гарантировано, поскольку старый #onAttach(android.app.Activity) устарел, а новый #onAttach(android.content.Context) .

Лучший способ справиться с таким сценарием, когда объект используется перед инициализацией, – это проверить свойство isInitialized (), а затем использовать его.

Intereting Posts
Как подсчитать время выполнения наблюдаемого Как указать общий тип на перегруженном операторе в Котлин? Как переопределенные свойства обрабатываются в блоках init? Как определить, является ли объект унаследованным от определенного класса в Котлине? Самый чистый способ переназначить значение переменной при выполнении условия в Котлине @Embeddable класс с val в Котлине Размер RealmResults возвращается Zero Как реализовать общую функцию интерфейса в Котлин? Неразрешенный опорный кинжал 2 + kotlin + android gradle Вложенные лямбда-звонки в Котлин Котлин, получивший доступ к классу Java Возьмите последний элемент n в Котлине Просмотр Android Update после успеха JSONRequest Абстрактный класс Котлина с общим параметром и методами, которые используют тип param В Android Java / Kotlin реализация интерфейса дает ему прямой доступ к локальным переменным класса вложенности