フラグメントにおけるonCreate()、onCreateView()、onActivityCreated()の違いと使用法


329

違いは何ですかonCreate()onCreateView()onActivityCreated()彼らはそれぞれのために使用される断片で、何が?



@BradLarsonなぜこれがクローズされたのか分かりません。これは比較的人気のある質問であることが判明しており、コメントに記載されているリンクとは異なります。この質問は、3つの異なる方法の違いとそれらの比較方法を求めていますが、コメントでリンクした質問では、これらの方法のうち2つしか言及されていません。
Farbod Salamat-Zadeh 2015

@BradLarson公正で十分に見分けられます。私は理解しましたが、3つの方法をよりよく比較し、追加の詳細についてリンクを参照する答えを書くことはできませんか?
Farbod Salamat-Zadeh

2
@ FarbodSalamat-Zadeh-はい。より適切な回答を提供できると思われる場合は、質問を再開しました。できれば答えずにそのままにしたくありませんでした。
ブラッドラーソン

回答:


395

onCreate():

onCreate()中にメソッドがFragmentされた後に呼び出さActivityさんonAttachFragment()が、その前FragmentonCreateView()
このメソッドでは、変数を割り当てたり、Intentエクストラを取得したり、ビュー階層に関係のないもの(つまり、非グラフィカルな初期化)を取得したりできます。ときに、このメソッドを呼び出すことができるからであるActivityのがonCreate()終了していない、とここでビュー階層にアクセスしようとしているので、クラッシュすることがあります。

onCreateView():

onCreate()(で呼び出されるFragment)、FragmentさんがonCreateView()呼ばれています。View変数を割り当てて、グラフィカルな初期化行うことができますViewこのメソッドからを返すことが期待されており、これがメインUIビューFragmentですが、レイアウトやグラフィックを使用しない場合は、戻ることができnullます(オーバーライドしない場合、デフォルトで発生します)。

onActivityCreated():

名前の状態としては、これがされた後に呼び出さActivityさんがonCreate()完了しました。後onCreateView()に呼び出され、主に最終的な初期化(UI要素の変更など)に使用されます。


要約すると...
...それらはすべてで呼び出されますFragmentが、異なるときに呼び出されます。任意の非グラフィカルinitialisationsを行うために、最初に呼び出されます。次に、で使用する変数を割り当てて宣言できます。その後、を使用して、すべてが完了したら、最終的な初期化を行います。
onCreate()ViewonCreateView()onActivityCreated()


あなたは公式Androidのドキュメントを表示したい場合は、ここで見つけることができます:
- - -onCreate()
onCreateView()
onActivityCreated()

Stack Overflowには、少し異なりますが、あまり開発されていない質問/回答もあります。


6
画面が回転したときに再度呼び出されないように、onCreate()で非グラフィカル初期化を実装すると思いました。それは私がfragment.setRetainInstance(true)を呼び出さなければならないことが判明します。そうでなければ、画面が回転したときにonCreate()とonCreateView()の両方が再び呼び出されます。
くそー野菜

onCreateView()では、ビュー階層にアクセスしても安全ですか?
コーディ

@Cody私はそのようにビュー階層にアクセスすることがまさに目的であると信じていonCreateViewます。
Farbod Salamat-Zadeh

1
ただし、アクティビティのonCreate()はonActivityCreated()まで終了しない場合があります。これらは、ビュー階層にアクセスするためにonCreateViewでクラッシュする可能性がありますか?onCreateView()/ onActivityCreated()の違いはわかりません
Cody

1
(少なくともAppCompatActivityで)注目すべき点の1つは、アクティビティが再作成されると(たとえば、最小化されて強制終了された後)、アクティビティonCreate()およびsuper.onCreate()が完了する前にフラグメントonCreate()が呼び出されることです。Daggerなどを使用していて、注入される親アクティビティの何かにアクセスする必要がある場合、これは問題になる可能性があります。これに対する1つの解決策は、onCreate()が呼び出されるたびに呼び出されるonActivityCreated()にコードを配置することです。
ニコラス

144

簡潔で絵画的な答えを探している人のために:

ここに画像の説明を入力してください https://hanaskuliah.wordpress.com/2015/12/07/android-5-development-part-6-fragment/


そして、

ここに画像の説明を入力してください


21
同意した。Comic Sansはこのようなものに必要です
Kartik Chugh

1
同じ図に3つの異なるフォントが表示されたのは初めてで、どういうわけか私の人生は完全なものになりました。
Gil Sand、

フラグメントが再起動できるのはいつですか?
Saurabh

1
プロセスが停止した後、フラグメントが再作成されないのはなぜですか?申し訳ありませんが、タスクの状態のみがバンドルとして保存され、再作成されます。アプリは再びフォアグラウンドになります。
標準出力

6

onActivityCreated()-非推奨

onActivityCreated()フラグメントバージョン1.3.0-alpha02として廃止されました

onActivityCreated()メソッドは廃止されました。フラグメントのビューに触れるコードはonViewCreated()(onActivityCreated()の直前に呼び出されます)で行う必要があり、他の初期化コードはonCreate()で行う必要があります。特にアクティビティのonCreate()が完了したときにコールバックを受け取るには、onCycle()でアクティビティのライフサイクルにLifeCycleObserverを登録し、onCreate()コールバックを受け取ったら削除する必要があります。

詳細情報はここにあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.