首页 > 解决方案 > 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()
    }
}

之后,本机后退按钮不再起作用,但工具栏后退确实按预期工作。该页面上的文档似乎使它看起来只是一个听众,不应该影响导航链,所以我在这里做错了什么?

标签: androidandroid-fragmentsandroid-architecture-navigationandroid-navigationandroid-navigation-graph

解决方案


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()
    }
}

推荐阅读