单击后退按钮时,应用程序会在一秒钟后崩溃

when click back button, the app crashs after a seceond

我已经自定义了后退按钮。当我点击它时,应用程序会在一秒钟后崩溃。 这是代码: error log

    private var mBackPressed: Long = 0
    private val timeInterval = 2000



    private fun configBackPress() {
        requireActivity().onBackPressedDispatcher.addCallback(this, true) {
            when {
                mBackPressed + timeInterval > System.currentTimeMillis() -> {
                   
                    requireActivity().onBackPressedDispatcher.onBackPressed()
                }
                else -> {
                    Snackbar.make(
                        requireActivity().findViewById(android.R.id.content),
                        getString(R.string.press_once_again_back_button_to_exit),
                        Snackbar.LENGTH_SHORT
                    )
                        .setAnchorView(viewBinding.vSnackBarHelper)
                        .show()

                    mBackPressed = System.currentTimeMillis()
                }
            }
        }
    }

当用户在后退按钮上单击两次时,后退应该起作用。

在调用 requireActivity().onBackPressedDispatcher.onBackPressed() 之前。您应该将 isEnabled 设置为 false 因为如果我们查看 onBackPressed 源代码,我们会看到:

它会寻找活跃的回调,如果找到,就会调用它们,然后 returns。这就是循环的原因。

您的代码应该是:

isEnabled = false
requireActivity().onBackPressedDispatcher.onBackPressed()

替换

requireActivity().onBackPressedDispatcher.onBackPressed()

只有

finish()

当前您在 Fragment 中设置的 onBackPressedDispatcher 正在调用 (required Activity) 中的 onBackPressed,它将首先尝试传播此事件拥有孩子 - Fragments。因此,onBackPressedDispatcher 将再次被触发,它将再次调用 Activitys 方法,这是循环

编辑:isEnabled = false 是一个更好的方法,只是想给你一些案例描述