【发布时间】:2020-08-02 00:37:55
【问题描述】:
Google 在 Android 上弃用 Fragment 的 onActivityCreated() 并推荐使用 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 中只能观察到的状态只是 State: INITIALIZED。
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。
【问题讨论】:
-
你找到解决问题的方法了吗?我对谷歌建议的解决方案有同样的问题。想知道我是否误解了他们所说的内容,实际上不应该在那里更新工具栏,而是应该与片段生命周期相关联。
标签: android android-fragments android-activity android-lifecycle