Fragmentの使用上の注意事項
1879 ワード
Fragmentタスクスタック
Fragmentもタスクスタック管理を追加し、複数のFragmentが前後して追加された後、前のFragmentに戻ることができ、activityコンテナ内にFragmentがない場合、Activityを終了します.Activityはタスクスタックによって管理され、先進的な後出の原則に従い、fragmentタスクスタックの効果はactivityと同じである.
// commit
FragmentTransaction.addToBackStack(null) ;
完全なコードは次のとおりです.
Fragment fg = new Fragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, fg, "tag_fragment");
ft.addToBackStack(null);
ft.commit();
ではなくactivityを直接終了します.(Activityのすべてがfragmentで構成する、fragmentに
が追加されている場合、最初のfragmentに戻るとページが
に表示される).呼び出しaddToBackStack(null)現在のトランザクションをロールバックスタックに追加し、replaceメソッドを呼び出すとFragment
が呼び出されますが、
、つまりonDestoryView
とonCreateView
が呼び出されます.現在のfragmentビューの状態を保存するには、hide後addの新しいFragment ActivityとFragment通信
setArguments(Bundle bundle)
によって実現され、FragmetnではgetArguments()
によってFragment重複問題
スクリーンの回転やメモリの再起動(Fragmentおよびコンテナactivityがシステムによって回収されてから開くと再初期化)は、activity自体が再起動されるとFragmentが復元され、Fragmentのコードが作成されて新しいFragmentが作成されるため、Fragmentが重なる問題を引き起こします.
:onCreateメソッドでパラメータBundle savedInstancesStateを判断し、Fragmentインスタンスをアイドル時に初期化し、その後FragmentでonSaveInstanceState
メソッドでデータを復元