AndroidのDialogはボタンを押すと自動的に閉じてしまいます.
Dialogをそのまま残しておきたい場合に役立つ小技を紹介します.
まず、builderを利用して作成する際に、PositiveButton(押しても閉じてほしくないボタン)のOnClickListenerに対してnullを設定します.・・・ポイント1
その後、builderで作成したDialogにOnShowListenerを設定し、onShowの中でDialogのButtonを取得してOnClickListenerを設定します.・・・ポイント2
ポイント1として、PositiveButtonを設定しないとそもそもOKボタンが表示されません.
ポイント2として、DialogのButtonはViewなので、OnClickListener#onClickの引数にDialogが有りません.条件分岐の結果等応じてDialogを閉じたい場合は、builderで作成したDialogを格納する変数をfinalにしておき、内部クラスから参照できるようにしておきましょう.
上記を実装すると以下のようになります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@Override public Dialog onCreateDialog(Bundle savedInstatnceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(dialogView) .setPositiveButton(R.string.add, null);//ポイント1 final AlertDialog alertDialog = builder.create(); alertDialog.setOnShowListener(new OnShowListener() { @Override public void onShow(DialogInterface dialog) { Button okButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); okButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //ここにOKボタンの処理を記載 //Dialogを閉じたい場合は以下のように実装 alertDialog.dismiss(); } }); } }); return alertDialog; } |
Dialogが勝手に閉じてほしくない場合としては、エラー時に入力内容を保持させておき、ユーザに修正を促すような場合でしょうか.
このようなケースで勝手に閉じられると、ユーザは再度1から入力しなくてはならず、ユーザビリティが低下してしまいます.