バックキーで確認ダイアログを表示する際のコードです。アクティビティ内に記載します。
@Override public boolean onKeyDown(int keyCode, KeyEvent event){ Log.d(getClass().getName(), "onKeyDown()"); if(keyCode== KeyEvent.KEYCODE_BACK){ return onKeyBack(); } return true; }
public boolean onKeyBack() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.getInstance()); alertDialogBuilder.setTitle("ゲームの終了"); alertDialogBuilder.setMessage("ゲームを終了しますか?"); // アラートダイアログの肯定ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します alertDialogBuilder.setPositiveButton( "はい", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // OKを押したときの処理 } } ); // アラートダイアログの否定ボタンがクリックされた時に呼び出されるコールバックリスナーを登録します alertDialogBuilder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // キャンセルを押したときの処理 } } ); alertDialogBuilder.setCancelable(true); // アラートダイアログを表示します AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); return true; }
これだと、バックキー押して、確認ダイアログを表示中に再度バックキーを押すと、このダイアログ自体がキャンセルされてしまいます。なので、ダイアログ自体をキャンセルされたくない場合は上記のsetCancelable()の引数を下記のようにfalseにしてあげます。
alertDialogBuilder.setCancelable(false);