GoogleはAndroid)でフラグメントの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)
}
上記のコードの何が問題になっていますか?
PDATE 1:hostActivity.lifecycle.currentStateを使用するのを忘れたようで、アクティビティのライフサイクルではなくフラグメントのライフサイクルを確認しました。
PDATE 2:1つのホストアクティビティと2つのフラグメントの間で[戻る]ボタンをクリックしたときに、1つのホストアクティビティと2つのフラグメントに対して機能しないGoogleのアプローチにより、onAttachは呼び出されず、onActivityCreatedが呼び出されます。
私は次の方法でそれをしました:
class MyActivityObserver(
private val update: () -> Unit
) : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
owner.lifecycle.removeObserver(this)
update()
}
}
次のようにフラグメントonAttach(または別のライフサイクルメソッド)で使用します。
myActivity.lifecycle.addObserver(MyActivityObserver {
myOnActivityCreated()
})
Lifecycle.Stateをグラフのノードと見なし、Lifecycle.Eventをこれらのノード間のエッジと見なすことができます。
したがって、ON_CREATE関数でState.Createdに到達することはありません。
ソリューション
class YourFragment : Fragment(), LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onCreated(){
Log.i("tag","reached the State.Created")
}
override fun onAttach(context: Context) {
super.onAttach(context)
lifecycle.addObserver(this)
}
override fun onDetach() {
super.onDetach()
lifecycle.removeObserver(this)
}
}
詳細
https://developer.Android.com/topic/libraries/architecture/lifecycle#lc