单击后退按钮时,应用程序会在一秒钟后崩溃
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
正在调用 (require
d Activity
) 中的 onBackPressed
,它将首先尝试传播此事件拥有孩子 - Fragment
s。因此,onBackPressedDispatcher
将再次被触发,它将再次调用 Activity
s 方法,这是循环
编辑:isEnabled = false
是一个更好的方法,只是想给你一些案例描述
我已经自定义了后退按钮。当我点击它时,应用程序会在一秒钟后崩溃。 这是代码: 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
正在调用 (require
d Activity
) 中的 onBackPressed
,它将首先尝试传播此事件拥有孩子 - Fragment
s。因此,onBackPressedDispatcher
将再次被触发,它将再次调用 Activity
s 方法,这是循环
编辑:isEnabled = false
是一个更好的方法,只是想给你一些案例描述