我最近更新了我的依赖项,以将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()
}