android - Android导航返回按钮调度程序奇怪的行为
问题描述
我正在使用导航组件,并试图只听片段中的后退按钮;在收听之前,一切正常,这意味着工具栏按钮和本机后退按钮都可以按预期导航到上一个片段。
所以,为了添加一个监听器,我遵循了这个:https ://developer.android.com/guide/navigation/navigation-custom-back并在我的片段中添加了一个回调,如下所示:
override fun onCreate(savedInstanceBundle: Bundle?){
// saveIfNew when back button is pressed
requireActivity().onBackPressedDispatcher.addCallback(this){
viewModel.checkAndSave()
}
}
之后,本机后退按钮不再起作用,但工具栏后退确实按预期工作。该页面上的文档似乎使它看起来只是一个听众,不应该影响导航链,所以我在这里做错了什么?
解决方案
OnBackPressedCallback
当您不再需要拦截后退按钮时,您想禁用它。为此,请使用setEnabled(boolean)
方法。您也可以通过调用完全删除您的回调remove()
。
此外,如果您只想保存并退出当前片段,您可以findNavController().navigateUp()
在handleOnBackPressed
方法中使用:
override fun onCreate(savedInstanceBundle: Bundle?){
// saveIfNew when back button is pressed
requireActivity().onBackPressedDispatcher.addCallback(this){
viewModel.checkAndSave()
findNavController().navigateUp()
}
}
推荐阅读
- c - 如何从整数之前的文件中读取字符串
- ios - Xcode 10 无法下载配置文件
- python - 如何在另一个过程中调用一个过程
- python - “如何不均匀地迭代两个列表”
- python - 计算斐波那契时的模数问题
- javascript - 如何在一个对话框中添加多选输入?
- html - 在 Foundation for Email、Zurb 中转义“<”字符
- angular - 强制重新加载 Angular 6 组件
- c++ - LLVM - 如何将 ConstantExpr 转换为 ConstantDataArray,以便打印全局变量 char* 的值?
- asp.net - 使用锁防止重复 api 提交 ASP.NET Core Web API