4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

特定のタイミングでバックボタンを無効化する

Last updated at Posted at 2023-12-23

はじめに

この記事はand factory.inc Advent Calendar 2023 24日目の記事です。
昨日は @arusu0629 さんの「スクラムマスターに俺はなる!」でした。

特定のタイミングでバックボタンの操作を無効にする方法について記載します

やりたいこと

  • ViewPagerのような親Fragmentと子Fragmentを使っていて、親Fragmentで既に、OnBackPressedDispatcher を使ってバックボタンの操作をカスタマイズしている
  • 子Fragmentでアニメーションなどを再生中はバックボタンの操作を無効にしたい
  • アニメーション再生中以外は親Fragmentでバックボタンのイベントを受け取リたい

実装

子Fragment.kt

    private val backPressedCallback by lazy {
        // OnBackPressedCallback(true)にすると
        // 親Fragmentでバックボタンのイベントが受け取れなくなるため false を指定する
        object : OnBackPressedCallback(false) {
            override fun handleOnBackPressed() {
                // バックボタンの操作を無効化したいので何もしない
            }
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, backPressedCallback)
    }

    private fun startAnimation(){
        // バックボタンの操作を受け取るようにする
        backPressedCallback.isEnabled = true
    }

    private fun finishAnimation(){
        // バックボタンのイベントを受け取らないようにする。親のFragmentで受け取るようにする
        backPressedCallback.isEnabled = false
    }

おわりに

  • イベントを受け取らないように OnBackPressedCallback を生成するとうまく動きました
  • 他にも良いやり方がありましたら教えてください
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?