読者です 読者をやめる 読者になる 読者になる

たかずんドットコム

文系Webプログラマから生み出される杜撰なTipsと日常の記録

戻るボタンで前のフラグメントに戻る処理を実装する

前回記事で、

ActivityとFragmentを利用して画面遷移を実装させる - たかずねブログ

FragmentManagerを利用して、フラグメントの切り替えを実装しました。
今回は戻るボタンを押した際に、前のフラグメントに戻る機能を実装します。

とりあえず、こんな感じの切り替えメソッドを実装。

private void replaceFragment(Fragment f) {
        FragmentTransaction transaction = 
        getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.container, f);
        transaction.addToBackStack(null);
        transaction.commit();
    }

replace(addでも可)で切り替えた後、

transaction.addToBackStack(null);

するのがミソ。 nullが入っている部分は、String型で識別キーを指定できます。
次に戻るボタンが押された際のメソッドを定義します。

@Override
    public void onBackPressed() {
        int backStackCnt = 
        getSupportFragmentManager().getBackStackEntryCount();
        if (backStackCnt != 0) {
            getSupportFragmentManager().popBackStack();
        }
    }

onBackPressedメソッドをオーバーライドして、処理を書き換える。 マネージャーに存在するバックスタック数が1以上あるならば、popBackStackで直前のスタックに遷移します。

もし、戻り先を指定したいときは、、、

transaction.addToBackStack("hoge");  

という感じで識別キーを指定してあげて、

getSupportFragmentManager().popBackStack("hoge");

ってな感じにすることで指定位置に戻ることが可能です。
私の記事でわからないことは、以下からどうぞ

5月 | 2011 | それは叩いても直らない