お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【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処理をまとめることが出来ました。

次回は、カスタマイズしたダイアログを使用する場合の注意点について書いていきたいと思います。

コメントをどうぞ

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


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00