フラグメントの履歴管理

1つのアクティビティの中でフラグメント(Fragment)を切り替えるときに、前のフラグメントの状態を保持しておきたい場合があります。

そんなときにはFragmentTransactionFragmentManagerの2つを使ってフラグメントの保存と修復を行います。

フラグメントの保存

まず、フラグメントの保存は次のようなコードで行うことが可能です。

    final String BACK_STACK_KEY = "BACK_STACK";
        //フラグメントを保存するキー
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    MyFragment fragment = new MyFragment();
    ft.add(R.id.container, fragment).addToBackStack(BACK_STACK_KEY).commit();

この例では次の1行でMyFragmentというフラグメントをスタックに保存しています。

   ft.add(R.id.container, fragment).addToBackStack(BACK_STACK_KEY).commit();

addToBackStackメソッドにフラグメントを保存するスタックのキーを指定することで、フラグメントが保存され端末の戻るボタンで前のフラグメントに戻ることが可能になります。

もし、スタックに保存するフラグメントが複数なく、現在のものだけを保存する場合は次のようにnullを渡します。

ft.add(R.id.container, fragment).addToBackStack(null).commit();

フラグメントの復元

フラグメントを保存した場合、何も設定しなくても戻るボタンで1つ前のフラグメントに戻れますが、プログラム的に戻るには次のコードを書きます。

    FragmentManager fm = getFragmentManager();
    fm.popBackStack(BACK_STACK_KEY);

これをアクティビティ内の適当な個所で呼び出せば、ボタンがクリックされたときなど好きなタイミングでフラグメントを1つ前の状態に戻すことが可能です。

フラグメントの保存と同様に1つ前の状態に戻りたいだけなら、popBackStackにキーではなくにnullを渡すだけでもOKです。

関連項目
プライバシーポリシー