2015/03/19

DialogFragment の中に Fragment を表示する方法

ちょっと複雑な Dialog を表示しようと思った場合、DialogFragment の中に Fragment を表示したいということがあるかと思います。
しかし、XML を使った静的な Fragment は入れ子構造に出来ないようです。

では、どうしたら良いのかというと、動的に Fragment を追加してやれば良いです。
以下のように、onViewCreated() で Fragment を追加します。この時、getChildFragmentManager() を使用していることに注意です。

TestDialog.java
public class TestDialog extends DialogFragment {
    public TestDialog() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.dialog_test, container, false);
        return v;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        Fragment innerFragment = new InnerFragment();
        getChildFragmentManager().beginTransaction().add(R.id.fragment, innerFragment).commit();
    }
}

dialog_test.xml
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />