【Android Tips】AlertDialog作成をまとめるクラスを作る②~onClickの処理をまとめる
前回はAlertDialogを作成する処理を別クラスに移しました。
今回は作成したダイアログのonClick処理をActivityでまとめたいと思います。
まず、ActivityにDialogInterface.OnClickListenerを実装します。
必要であればDialogInterface.OnCancelListenerも実装します。
@Override public void onClick(DialogInterface dialog, int which) { switch(which){ case DialogInterface.BUTTON_POSITIVE: //--- OKボタン --- dialog.dismiss(); break; case DialogInterface.BUTTON_NEGATIVE: //--- キャンセルボタン --- dialog.cancel(); } } @Override public void onCancel(DialogInterface dialog) { //ダイアログキャンセル後の処理はここに記述 }
onClickの2番目の引数には、どのボタンが押されたかが入ってきますので、
この値で処理を場合分けします。
それぞれボタンが押された場合にダイアログが消えるように処理を書いていますが、
使用しているメソッドを分けました。
dismiss() メソッドを使用すると onDismissイベントが、
cancel() メソッドを使用すると onCancelイベントの後にonDismissイベントが発生します。
キャンセルボタンが押された際にダイアログを消す、という処理だけならdismiss() メソッドで充分だと思いますが、端末の戻るボタンが押されダイアログがキャンセルされた場合もcancel() メソッドと同様のイベントが発生します。
キャンセルボタンが押された場合と、戻るボタンでキャンセルされた場合で同じ処理を実行するために、キャンセルボタンが押された場合はdialog.cancel();とし、具体的な処理はonCancel()にて記述します。
しかし、これだけではどのダイアログのボタンが押されたかの判断が出来ません。
そこで、ダイアログのidを保持する変数をActivityに設け、
ダイアログの表示前にこの変数を更新することにします。
@Override protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); // ここに、ダイアログの表示前に必要な処理を記述する。 dialogId = id; }
onPrepareDialog()はダイアログが表示される度に、表示の前に呼ばれるメソッドです。ここに表示前に必要な処理を記述します。
今回はshowDialog()で渡されたidをActivityの変数dialogIdに保持する処理を記述します。
最終的なコードは以下の様になります。
@Override protected void onPrepareDialog(int id, Dialog dialog) { super.onPrepareDialog(id, dialog); // ここに、ダイアログの表示前に必要な処理を記述する。 dialogId = id; } @Override public void onClick(DialogInterface dialog, int which) { switch(which){ case DialogInterface.BUTTON_POSITIVE: //--- OKボタン --- dialog.dismiss(); switch(dialogId){ case 100: //--- 具体的な処理 --- break; } break; case DialogInterface.BUTTON_NEGATIVE: //--- キャンセルボタン --- dialog.cancel(); } } @Override public void onCancel(DialogInterface dialog) { //ダイアログキャンセル後の処理はここに記述 switch(dialogId){ } }
これでダイアログを複数作成した場合のonClick処理をまとめることが出来ました。
次回は、カスタマイズしたダイアログを使用する場合の注意点について書いていきたいと思います。
コメントをどうぞ