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

たかずんドットコム

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

ActivityとFragmentを利用して画面遷移を実装させる

android Java

ActivityとFragmentを1:nで利用するのが最近の主流なのでしょうか。

ActivityにFrameLayoutを用意して、その中身にFragmentを表示するやり方を行うことで、一つのActivityでいくつもの画面(フラグメント要素)を実装することが出来ます。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hoge);

        if (savedInstanceState == null) {
            HogeFragment fragment = new HogeFragment();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.add(R.id.container, fragment).commit();
        }
    }

これでidがcontainerのFrameLayoutにHogeFramentを表示できます。フラグメントにもアクティビティと同様のライフサイクルがあり、commit()することでフラグメントが生成されます。 フラグメントのライフサイクルについては、

を参照してください。正直あんまりわけわかってないです。。。

んで、違うフラグメントを表示したいよーって時は、

public void changeFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.container, fragment);
        transaction.commit();
    }

みたいなメソッドを作って呼び出せばOKです。
transaction.addの部分ですが、replaceでも大丈夫です。replaceの場合、今割り当てられている全てのフラグメントをremoveし、その後addの動作を実行するようです。
フラグメントをaddしまくって階層が深くなるとスタックオーバーフローしちゃうみたいなんで、基本的にはreplaceを使うみたいですね。

Android初心者におすすめする「Fragmentによるシンプルで効率的なUI実装」#Android #yahoo|CodeIQ MAGAZINE

Y.A.M の 雑記帳: Android FragmentTransaction のまとめ

参考になれば幸いです。