BACKキーを押すと通常はそのActivityを終了して前のActivityに戻るといった動作をしますが、例えば、データ入力をするActivityでBACKキーを押されたとき、ポップアップを表示して入力をキャンセルして本当に前の画面に戻るかどうか促す、というUIにしたいときがあります。こういう処理をしたいときは、BACKキーのイベントをオーバーライドすることで自由に制御を変更して対応することができます。
例:BACKキーをおされたときにポップアップを表示してキャンセルか続行か促す
まずは、バックキーのイベントを取得して、ポップアップダイアログを表示します。ダイアログの結果を受け取って、キャンセルならfinish()でActivityを終了します。そうでなければ何もしません。
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
showAlert(mContext, new OnMyAlert() {
@Override
public void onResult(boolean isYes) {
if (isYes) {
finish();
}
}
});
}
return false;
}
ポップアップダイアログを表示するメソッドです。Yes/Noの2つのボタンを表示して、結果を返します。
private void showAlert(Context context, final OnMyAlert onMyAlert) {
// Build
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.warning);
builder.setMessage(R.string.mes_warn_cancel);
// Left button
builder.setPositiveButton(R.string.answer_no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onMyAlert.onResult(false);
}
});
// Right button
builder.setNegativeButton(R.string.answer_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
onMyAlert.onResult(true);
}
});
// Show
builder.create().show();
}
結果を渡すためのインターフェースです。
public interface OnMyAlert {
public abstract void onResult(boolean isYes);
}