Android アプリを開発中、端末の戻るボタンが押下されたかどうかを検知したいことがあると思います。
例えば、EditText エリアに何かを入力中に、うっかりボタンを押してしまっても、前のページに戻る前に確認のアラートを出すような機能を追加するときや、そもそも戻るボタン自体を無効にしたい、などです。
私も極たまにしか使わないので、備忘録としてまとめます。
といっても実装はとっても簡単で、下記のように onBackPressed をオーバーライドするだけです。
@Override
public void onBackPressed(){
// 行いたい処理
}
あとは、この関数内で、戻るボタンが押されたときに実行したい処理を書くだけです。
私の場合、下記のような実装を行いました。
@Override
public void onBackPressed(){
// EditTextに入力された文字列を取得
EditText editText = findViewById([ID名]);
if (editText.getText().equal("")) {
finish();
} else {
// ダイアログ表示
new AlertDialog.Builder(this)
.setTitle([タイトル])
.setMessage([メッセージ])
.setPositiveButton("OK", (dialog, which) -> {
// OKが押された場合、Activity を終了し、前のページへ
finish();
})
.setNegativeButton("キャンセル", null)
.show();
}
}
上のコードでは、戻るボタンが押されたときに、EditText に入力された文字列を取得しています。
この時、EditText に何か文字が入力されていた場合、まだ編集中とみなし、警告のダイアログが表示されるようにしています。
EditText が空だった場合や、ダイアログでOKが押された場合は、finish() を実行し、現在表示されているアクティビティを終了して、前のページに戻ります。
なお、戻るボタンを検知する方法としては下記の記述方法もあります。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
// 戻るボタンの処理
}
}
この書き方を用いると、戻るボタン以外の検知にも使えます。
複数のボタンの検知の処理を書きたい場合には、こちらのほうが便利ですね。
ですが、今回は戻るボタンの検知のみが行えればOKだったので、私は前者を使いました。
なんといっても、関数名が分かりやすいですし。
このあたりは、好みと実装内容によって使い分けてください。
以上、Androidアプリで戻るボタンが押されたことを検知する方法でした。