世の中に出回っているサンプルはAlertDialogを使うサンプルばかりなので、ここでは生のDialogにsetContentView()するタイプを紹介します。
まずは、DialogFragmentを継承したクラスを作ります。
public class MyDialogFragment extends DialogFragment {
public static MyDialogFragment newInstance(Fragment target, int requestCode) {
MyDialogFragment fragment = new MyDialogFragment();
fragment.setTargetFragment(target, requestCode);
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.dialog_input);
return dialog;
}
}
重要なのはonCreateDialog()メソッドです。このメソッドでDialogオブジェクトを作成し、returnすることでダイアログが表示されます。
さっそく呼び出してみましょう。呼び出し側のFragmentにshowMyDialog()メソッドを追加したとします。
void showMyDialog() {
MyDialogFragment dialog = MyDialogFragment.newInstance(this, REQUEST_NAME);
dialog.show(getFragmentManager(), "dialog");
}
newInstance()メソッドの引数にFragmentとリクエストコードを渡していますが、これについては次のエントリーでどう使われているかを紹介します。
DialogFragmentの表示はshow()メソッドを呼ぶだけです。ActivityのshowDialog()ではないので注意しましょう。