DialogFragmentの作成

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()を使って値を渡しているのは
コンストラクタで値を渡すと
ダイアログが生成されるタイミングで値が破棄されることがあるから

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です