onActivityCreated устарела, как правильно использовать LifecycleObserver? - PullRequest
1 голос
/ 19 апреля 2020

Google осуждает onActivityCreated () фрагмента на Android и рекомендует использовать LifeCycleObserver:

 To get a callback specifically when a Fragment activity's
     * {@link Activity#onCreate(Bundle)} is called, register a
     * {@link androidx.lifecycle.LifecycleObserver} on the Activity's
     * {@link Lifecycle} in {@link #onAttach(Context)}, removing it when it receives the
     * {@link Lifecycle.State#CREATED} callback.

Поэтому я пытаюсь сделать это рекомендованным способом, но единственное состояние, которое я могу наблюдать в Logcat, это просто Состояние: ИНИЦИАЛИЗИРОВАННЫЙ .

 private lateinit var lifecycleObserver: LifecycleObserver

 override fun onAttach(context: Context) {
    super.onAttach(context)

    hostActivity = context as HostActivity

    lifecycleObserver = object : LifecycleObserver {

        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        fun onCreate() {
            Logger.tag("SOME-TAG")d("State: ${lifecycle.currentState}")

            if(lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) {
                Logger.tag("SOME-TAG").d("CREATED")
                hostActivity.lifecycle.removeObserver(lifecycleObserver)
            }
        }
    }

    hostActivity.lifecycle.addObserver(lifecycleObserver)
}

Что не так в коде выше?

ОБНОВЛЕНИЕ 1 : похоже, я забыл использовать hostActivity.lifecycle.currentState и проверял жизненный цикл фрагмента вместо жизненного цикла операций .

ОБНОВЛЕНИЕ 2 : предложенный Google подход не сработал для 1-го хоста и 2-х фрагментов, когда вы нажимаете кнопку назад от одного к другому, потому что onAttach никогда не вызывается, но вызывается onActivityCreated.

...