モケラ

Tech Sheets

mokelab

Fragmentを用いた画面遷移

最終更新日:2020-07-10

Activityであれば、Intentオブジェクトを作り、startActivity()で画面遷移できました。Fragmentでは、最初の貼り付けと同様にFragmentManagerとFragmentTransactionを用います。

FragmentのレイアウトXMLは次のようなものとします。ボタンが1つ。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    >
    <Button
        android:id="@+id/button_next"
        android:text="@string/next_page"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>

このボタンをタップすると、NextFragmentに遷移するには次のように記述します。

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_title, container, false);
    View button = root.findViewById(R.id.button_next);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FragmentManager manager = getFragmentManager();
            FragmentTransaction transaction = manager.beginTransaction();

            transaction.replace(R.id.container, new NextFragment());

            transaction.commit();
        }
    });
    return root;
}

FragmentクラスにはgetFragmentManager()メソッドがあるので、これでFragmentManagerオブジェクトを取得します。後はActivityのonCreate()メソッドで貼り付けたのと同様です。画面遷移の場合は、すでに張り付けられているFragmentを置き換えすることになるので、replace()メソッドを使用します。間違えてadd()を呼ぶと、今表示中の画面と次の画面が重なって表示されてしまいます。

一覧に戻る