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

问题描述 投票:0回答:2

我定制了后退按钮。当我点击它时,应用程序在一秒钟后崩溃。 这是代码: 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()
                }
            }
        }
    }

当用户单击后退按钮两次时,后退应该可以工作。

android kotlin navigation back-button
2个回答
4
投票

在致电

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

它会查找活动回调,如果找到,则调用它们并返回。这就是循环的原因。

你的代码应该是:

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

1
投票

更换

requireActivity().onBackPressedDispatcher.onBackPressed()

finish()

目前,您在

onBackPressedDispatcher
中设置的
Fragment
正在调用 (
onBackPressed
d)
require
中的
Activity
,它首先会尝试将此事件传播到自己的子级 -
Fragment
。所以,再次,
onBackPressedDispatcher
将被触发,再次调用
Activity
的方法,这是一个无限循环

编辑:

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

© www.soinside.com 2019 - 2024. All rights reserved.