web-dev-qa-db-ja.com

フラグメントでのLiveData監視

2019年現在、フラグメントでLiveDataの監視を開始する場所と、thisまたはviewLifecycleOwnerobserve()メソッド。

  • これによると Google公式ドキュメントonActivityCreated()でパラメータとしてthis(フラグメント)を渡すことを確認する必要があります。

  • この Googleサンプル によると、onViewCreated()でパラメータとしてviewLifecycleOwnerを渡すことに注意する必要があります。

  • この I/Oビデオ によると、私はthisではなくviewLifecycleOwnerを使用するべきではありませんが、どこから観測を開始すべきかを指定していません。

  • この落とし穴 post によると、onActivityCreated()で観察し、viewLifecycleOwnerを使用する必要があります。

それで、どこから観察を始めるべきですか? thisまたはviewLifecycleOwnerを使用する必要がありますか?

10
fernandospr

アクティビティから観察する場合は、onCreate()で観察し、LifecycleOwnerにthisを使用することができます here

アクティビティのライフサイクルに接続されているライフサイクル対応コンポーネントがある場合、ON_CREATEイベントを受け取ります。 @OnLifecycleEventで注釈が付けられたメソッドが呼び出されるため、ライフサイクル対応コンポーネントは、作成された状態に必要なセットアップコードを実行できます。

ここで、フラグメント内で監視している場合、onViewCreated()またはonActivityCreated()で監視でき、getViewLifecycleOwner()を使用する必要があります here が理由です。

フラグメントのビューのライフサイクルを表すLifecycleOwnerを取得します。ほとんどの場合、これはフラグメント自体のライフサイクルを反映していますが、フラグメントが切り離されている場合、フラグメントのライフサイクルはビュー自体のライフサイクルよりもかなり長くなる可能性があります。

2
Rodrigo Queiroz

onViewCreatedonActivityCreatedのどちらで行うかは関係ありません。どちらも、フラグメントが膨らんだときに呼び出されます。最初にonViewCreated、次にonActivityCreated。それは本当に好みの問題です。

LiveDataオブジェクトはLifecycleOwnerを取り、FragmentActivityの両方がインターフェイスを実装するため、thisを渡すだけで済みます。

0
Francesc

I/OトークのYigitによると、フラグメントとそのビューには異なるライフサイクルがあります。 LiveDataがフラグメントまたはそのビューに関連しているかどうかを識別し、必要なものを渡す必要があります。両方ともLifecycleOwnerの実装であるため、コンパイラーは両方を受け入れます。

0
Arka Prava Basu