2019年現在、フラグメントでLiveData
の監視を開始する場所と、this
またはviewLifecycleOwner
をobserve()
メソッド。
これによると Google公式ドキュメント 、onActivityCreated()
でパラメータとしてthis
(フラグメント)を渡すことを確認する必要があります。
この Googleサンプル によると、onViewCreated()
でパラメータとしてviewLifecycleOwner
を渡すことに注意する必要があります。
この I/Oビデオ によると、私はthis
ではなくviewLifecycleOwner
を使用するべきではありませんが、どこから観測を開始すべきかを指定していません。
この落とし穴 post によると、onActivityCreated()
で観察し、viewLifecycleOwner
を使用する必要があります。
それで、どこから観察を始めるべきですか? this
またはviewLifecycleOwner
を使用する必要がありますか?
アクティビティから観察する場合は、onCreate()
で観察し、LifecycleOwnerにthis
を使用することができます here :
アクティビティのライフサイクルに接続されているライフサイクル対応コンポーネントがある場合、ON_CREATEイベントを受け取ります。 @OnLifecycleEventで注釈が付けられたメソッドが呼び出されるため、ライフサイクル対応コンポーネントは、作成された状態に必要なセットアップコードを実行できます。
ここで、フラグメント内で監視している場合、onViewCreated()
またはonActivityCreated()
で監視でき、getViewLifecycleOwner()
を使用する必要があります here が理由です。
フラグメントのビューのライフサイクルを表すLifecycleOwnerを取得します。ほとんどの場合、これはフラグメント自体のライフサイクルを反映していますが、フラグメントが切り離されている場合、フラグメントのライフサイクルはビュー自体のライフサイクルよりもかなり長くなる可能性があります。
onViewCreated
とonActivityCreated
のどちらで行うかは関係ありません。どちらも、フラグメントが膨らんだときに呼び出されます。最初にonViewCreated
、次にonActivityCreated
。それは本当に好みの問題です。
LiveData
オブジェクトはLifecycleOwner
を取り、Fragment
とActivity
の両方がインターフェイスを実装するため、this
を渡すだけで済みます。
I/OトークのYigitによると、フラグメントとそのビューには異なるライフサイクルがあります。 LiveData
がフラグメントまたはそのビューに関連しているかどうかを識別し、必要なものを渡す必要があります。両方ともLifecycleOwner
の実装であるため、コンパイラーは両方を受け入れます。