使用FragmentActivity
すると、フラグメントの状態が自動的に復元され、すべてのフラグメントが再作成されます。
onSaveInstanceState
これは主に状態を保存してからアクティビティの に復元することで行われることを私は知っていonCreate
ます。コードを少し見てみると、すべてのフラグメントが再作成され (または、retainInstance が true の場合にのみアタッチされ)、に追加されているFragmentManager
ことがわかりましたが、どのようにビューに追加されるかは明確ではありません。復元されました。
私の最初の問題は、他の質問に似たいくつかのフラグメントの重複を取得することでした。私はそれを回避しましonCreate
た:
Fragment f = fm.findFragmentByTag(tagName);
if(f==null) {
f = createFragment();
fm.beginTransaction().add(R.id.myContainer,f,tagName).commit();
} else {
//Nothing it's on the view
}
現在は機能していますが、どのように機能するのかまだ完全には理解できていません。
私の疑問は次のとおりです。
- どの瞬間に、どのようにフラグメントがビューにアタッチされますか? フラグメントの復元が
onCreate
ofで行われることを実験しましたFragmentActivity
。しかし、setContentView
その後に呼び出すと、フラグメントはどのようにビューにアタッチされますか? - 上書きせずにフラグメントの再作成を防ぐことはできます
onSaveInstanceState
か? フラグメントの数が異なる方向のレイアウトが異なるため、当初の意図は、保持されているとマークされた状態フラグメントを 1 つだけ再作成し、保持されているとマークされていない他のビュー フラグメントを復元しないことでした。