16

ViewPager で使用できるように、すべてのアクティビティをフラグメントに変換しています。

これを検索しましたが、満足のいく答えが見つからなかったので、ここで質問します。

私のアクティビティでは、onCreate()メソッドにいくつかのコードを書きました。たとえば、いくつかfindViewById()の s を呼び出して、いくつかの xml-buttons をアクティビティにリンクします。また、一部のビューを で非表示にしonCreate()、 を設定しOnClickListener()TextViewにテキストを入力し、通知を削除します。これらはすべてonCreate()メソッド内で行います。

私の質問は、このコードをフラグメントのどこに配置すればよいですか? onCreate()? onCreateView()? onActivityCreated()? なぜ?

よろしくお願いします!

4

2 に答える 2

23

プラニャーニの答えは近いですが、教育的な価値はほとんどありません。その上、彼の 2 番目のステートメントには、より適切なオプションがあります。

このコードをフラグメントのどこに配置すればよいですか? onCreate()? onCreateView()? onActivityCreated()? なぜ?

簡単に言えば、どちらかまたはどちらonCreateView()onActivityCreated()です。ビュー階層は まで作成されないため、フラグメントのライフ サイクルの最も早い時点で、ビューを拡張しonCreateView()クリック リスナーなどをアタッチできますたとえば、フラグメントを保持する場合など、フラグメントを一時的に切り離して再接続するシステムを優先して、スキップすることができます。onActivityCreated()onCreateView()onCreate()

フラグメントのビューを膨張させることは、アクティビティのビューを膨張させることとはわずかに異なることを指摘することで、Pragnani は正しいです。より具体的には、フラグメントはメソッドを定義しないため、findViewById()他のオブジェクトで呼び出す必要があります。

を使用するのではなくgetActivity().findViewById()、 が必要になりgetView().findViewById()ます。これは、アクティビティをビュー ルックアップに使用すると、同じビュー ID を持つ複数のフラグメントがアタッチされたときに問題が発生するためです。これは、さまざまなフラグメントのレイアウトでビュー ID を再利用する場合、または異なるデータを表示する 2 つの同一のフラグメントを表示する場合に当てはまります。どちらの場合も、最初の一致のみが返されますが、実際にはフラグメントのコンテキストでビューを検索する必要があります。これがまさにgetView()フラグメントのルート ビュー ( で返されたものonCreateView()) を返すため、ルックアップの範囲を適切に制限します。

于 2013-03-07T18:36:27.223 に答える
3

1. onCreate を空のままにし、super.onCreate() を呼び出します。

2. findViewById() の代わりに getActivity().findViewById() を使用します ビューのコンテキストが必要な場合は常に getActivity() を使用します。

 Do all other operations in onCreateview()
于 2013-03-07T17:41:15.223 に答える