【Kotlin/Android Studio】デバイスのバックボタン押下時イベント取得方法!onBackPressedDispatcher

この記事からわかること
- Android Studio/Kotlinでデバイスのバックボタン(戻るボタン)を押下したイベントを取得するには?
- onBackPressedメソッドの使い方
- onBackPressedDispatcherの使い方
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
デバイスのバックボタン押下時イベント:onBackPressed
Kotlinでデバイスに用意されているバックボタンを押下された時に任意の処理を実行したい場合はonBackPressed
をオーバーライドしてその中に処理を記述します。Activityにこれを実装するとFragmentに画面を切り替えてもこの処理は生きているのでFragmentが表示される状態でバックボタンを押すとこの場合トーストが表示されます。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onBackPressed() {
Toast.makeText(this,"バックボタンが押されたよ",Toast.LENGTH_LONG).show()
}
}
元々のバックボタンの処理(戻る処理)自体を残しておきたい場合はsuper.onBackPressed()
を実行します。
override fun onBackPressed() {
Toast.makeText(this,"バックボタンが押されたよ",Toast.LENGTH_LONG).show()
super.onBackPressed()
}
Fragmentに実装したい場合:onBackPressedDispatcher
Fragmentに実装したい場合はonBackPressed
メソッドをオーバーライドできないのでonBackPressedDispatcher
を使用します。addCallback
の引数には以下の値を渡します。
・owner
・・・ライフサイクル監視対象
・onBackPressedCallback
・・・バックボタン押下時に処理したいコールバック
class FirstFragment : Fragment() {
// onCreateView(省略)
override fun onAttach(context: Context) {
super.onAttach(context)
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Toast.makeText(context,"バックボタンが押されたよ",Toast.LENGTH_LONG).show()
}
}
}
OnBackPressedCallback
型の引数のenabled
にはこのコールバック処理の有効/無効のフラグを渡します。上記のように最初に引数として指定した後でもコードから以下のように動的に値を変化させることも可能です。
onBackPressedCallback.isEnabled = true
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。