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

この記事からわかること

  • Android Studio/Kotlinデバイスバックボタン(戻るボタン)を押下したイベント取得するには?
  • onBackPressedメソッド使い方
  • onBackPressedDispatcherの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

デバイスのバックボタン押下時イベント: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

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index