DialogFragmentの作成
DialogFragmentクラスを使ってダイアログを作成するには
FragmentActivityのサブクラスを作成する
まず、Javaで、FragmentActivityクラスのサブクラスを作成
onCreate()の中で
MyDialogFragmentクラスの生成、表示を実装
extends FragmentActivity
で継承しておく
次に、onCreate()の追加部分
//DialogFragment表示 FragmentManager manager = getSupportFragmentManager(); MyDialogFragment dialog = (MyDialogFragment)manager.findFragmentByTag("tag"); if(dialog == null){ dialog = new MyDialogFragment(); Bundle args = new Bundle(); args.putString("message","Message"); dialog.setArguments(args); dialog.show(manager, "tag"); }
次に、DialogFragmentのサブクラス作成
onCreateDialog()へダイアログの生成
onClick()へ
ok キャンセルボタンを押したときの処理を実装
このクラスでは
extends DialogFragment implements DialogInterface.OnClickListener
で継承しておく
まずは、onCreateDialog()の実装
@Override public void onCreateDialog(Bundle savedInstanceState){ //値の取得 String message = getArguments().getString("message"); return new AlertDialog.Builder(getActivity()). //タイトル設定 setTitle("Title") //メッセージ設定 .setMessage(message) //okボタンの設定 .setPositiveButton("ok",this) //cancelボタンの設定 .setNegativeButton("cancel",this) .create(); }
そして、ボタンクリックしたときの設定
switchで分岐させれるので、okとcancelの処理を
onClick()の中へかける
@Override public void onClick(DialogInstance dialog, int which){ switch(which){ //okボタンクリックの場合 case AlertDialog.BUTTON_POSITIVE: Toast.makeText(getActivity(), "ok", Toast.LENGTH_SHORT).show(); break; //cancelボタンクリックの場合 case AlertDialog.BUTTON_NEGATIVE: Toast.makeText(getActivity(), "cancel",Toast.LENGTH_SHORT).show(); break; } }
FragmentDialogに対して
setArguments()を使って値を渡しているのは
コンストラクタで値を渡すと
ダイアログが生成されるタイミングで値が破棄されることがあるから