arcanum_jp’s blog

おっさんの日記

バックキーで確認ダイアログを表示

バックキーで確認ダイアログを表示する際のコードです。アクティビティ内に記載します。

    @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);