これら2つの方法の本質的な違いは何ですか? TextViewを作成するとき、パフォーマンスのために1つを使用する必要がありますか?
編集:との違いは何ですか
onCreateView() {
root = some view
View v = new View(some context);
root.add(v);
return root;
}
onViewCreated() {
View v = new View(some context);
getView().add(v);
}
onCreateView
でビューを初期化する際にクラッシュが発生します。
onCreateView
でレイアウトを拡張する必要がありますが、findViewById
でonCreateView
を使用して他のビューを初期化しないでください。
ビューが適切に初期化されないことがあるためです。そのため、常にfindViewById
でonViewCreated
を使用し(ビューが完全に作成された場合)、ビューをパラメーターとして渡します。
onViewCreated
は、ビューが完全に作成されていることを確認します。
onViewCreated Androidドキュメント
onCreateView
(Android.view.LayoutInflater, Android.view.ViewGroup
、Android.os.Bundle
)が返された直後、ただし保存された状態がビューに復元される前に呼び出されます。これにより、サブクラスは、ビュー階層が完全に作成されたことがわかると、自身を初期化できます。ただし、この時点では、フラグメントのビュー階層はその親にアタッチされていません。
onViewCreated
はonCreateView
(TextView
を含むすべてのオブジェクトを初期化および作成するメソッド)の直後に呼び出されるため、パフォーマンスの問題ではありません。
開発者サイトから:
onViewCreated(ビュービュー、バンドルsavedInstanceState)
OnCreateView(LayoutInflater、ViewGroup、Bundle)が返された直後、ただし保存された状態がビューに復元される前に呼び出されます。これにより、サブクラスは、ビュー階層が完全に作成されたことがわかると、自身を初期化できます。ただし、この時点では、フラグメントのビュー階層はその親にアタッチされていません。
onViewCreated
のフィールドにサブビューを割り当てることをお勧めします。これは、フレームワークが自動的にnullチェックを実行して、フラグメントのビュー階層が適切に作成および拡張されていることを確認するためです(XMLレイアウトファイルを使用している場合)。
コードスニペット: FragmentManger.Java
// This calls onCreateView()
f.mView = f.performCreateView(f.getLayoutInflater(f.mSavedFragmentState), null, f.mSavedFragmentState);
// Null check avoids possible NPEs in onViewCreated
// It's also safe to call getView() during or after onViewCreated()
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
if (f.mHidden) f.mView.setVisibility(View.GONE);
f.onViewCreated(f.mView, f.mSavedFragmentState);
}
onCreateView
は、膨張したビューを返します。 OnViewCreated
はonCreateView
の直後に呼び出され、getには拡張ビューのパラメーターがあります。戻りタイプはvoid
です
onCreateView()
は、アクティビティおよび実行のonCreate()
と同等のフラグメントです実行中ビューの作成。onViewCreated()
実行後ビューが作成されました。
should I use one over the other for performance?
NO。パフォーマンスが向上したという証拠はありません。
実際にFramentsにもonCreate()
メソッドがあります。
しかし、それはまれに使用済みです(私は決して使用せず、そのための良いユースケースを見つけません)。
私は常にonCreateView()
の代わりにフラグメントでonCreate()
を使用します。
そして、私はそれで満足しています。
これらの主な違いは、kotlin.inonCreateView()を使用するとき、XMLファイルで表示するためにアクセスするたびに、使用する必要があると思いますfindViewByIdしかし、onViewCreatedでは、呼び出すだけでビューにアクセスできますそれのID。
onCreateViewは、レイアウトを作成してビューを膨張させるためにフラグメントで使用されます。 onViewCreatedは、上記の方法で作成されたビューを参照するために使用されます。最後に、onActivityCreatedでアクションリスナーを定義することをお勧めします。
onViewCreated
を使用する主な理由は、onViewCreate
に入るべきビュー階層のインフレーション/作成ロジックから初期化ロジックを分離するためです。他のすべてのパフォーマンス特性は同じに見えます。