戻るボタンで終了確認ダイアログを表示する | Exit confirmation dialog | Android

戻るボタン(Backキー)を押した場合に確認ダイアログを表示する方法です。

いきなりではありますが、サンプルコードを。

public class MainActivity extends AppCompatActivity {
    AlertDialog alertDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public void onBackPressed() {
        alertDialog = new AlertDialog.Builder(MainActivity.this)
                .setTitle("確認")
                .setMessage("終了してよろしいですか")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish();
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        alertDialog.dismiss();
                    }
                }).show();
    }
}

Backキーを押した際に、アラーとダイアログを作成し表示します。Yesならばfinish。No,ならば代やログを非表示にしました。

alertDialog.dismiss()によってダイアログを閉じます。実際はこれはなくても動くのですが、しっかり明示的に閉じておくべきでしょう。この方法はなんとなく違和感(alertDialogの中にalertDialog.dismiss??)を感じるかもしれませんが、問題ありません。

タスクからも消してしまう場合はfinish()ではなく、

@Override
public void onClick(DialogInterface dialogInterface, int i) {
    moveTaskToBack(true);
}

とします。

スポンサーリンク

ダイアログ領域外のタップを無効化する

BuilderにおいおてsetCancelable(false)を設定することで、ダイアログ領域の外側のタップを無効にすることができます。

//略
alertDialog = new AlertDialog.Builder(MainActivity.this)
        .setCancelable(false)
        .setTitle("確認")
        .setMessage("終了してよろしいですか")
//略