我最近更新了我的依赖项,以将OnBackPressedCallback更改从接口更改为抽象类。

我已经根据新文档here进行了设置,但是我觉得事情没有按预期进行。

我的片段的OnCreate看起来很像文档:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        requireActivity().onBackPressedDispatcher.addCallback(this) {
            backPressed()
    }
}


当我按下“后退”按钮时,backPressed()中的代码将运行,但是什么也没有发生。

我试过从回调内部调用handleBackPressed()requireActivity().onBackPressedDispatcher.onBackPressed()requireActivity().onBackPressed(),但是所有这些都会导致StackOverflowError,因为它似乎递归地运行该回调。

一定有一些我很想念的东西...

最佳答案

注册OnBackPressedCallback时,您将负责处理后退按钮。这意味着当您收到回调时,不会再发生其他任何后按行为。

如果使用的是Navigation,则可以使用NavController弹出后堆栈:

requireActivity().onBackPressedDispatcher.addCallback(this) {
    backPressed()
    // Now actually go back
    findNavController().popBackStack()
}

09-28 06:15