使用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
}
現在は機能していますが、どのように機能するのかまだ完全には理解できていません。
私の疑問は次のとおりです。
- どの瞬間に、どのようにフラグメントがビューにアタッチされますか? フラグメントの復元が
onCreateofで行われることを実験しましたFragmentActivity。しかし、setContentViewその後に呼び出すと、フラグメントはどのようにビューにアタッチされますか? - 上書きせずにフラグメントの再作成を防ぐことはできます
onSaveInstanceStateか? フラグメントの数が異なる方向のレイアウトが異なるため、当初の意図は、保持されているとマークされた状態フラグメントを 1 つだけ再作成し、保持されているとマークされていない他のビュー フラグメントを復元しないことでした。