如何使用Android中的导航控制器制作自定义后退按钮以返回某个目的地?

Posted

技术标签:

【中文标题】如何使用Android中的导航控制器制作自定义后退按钮以返回某个目的地?【英文标题】:how to make custom back button to go back to certain destination using navigation controller in Android? 【发布时间】:2020-02-03 23:04:39 【问题描述】:

我需要进行自定义行为,当用户按下后退按钮时,用户将以编程方式转到某个目的地。我实际上已经阅读了这个Handling back button in android Navigation Component

但我不明白如何使用自定义后退按钮代码。我觉得这很奇怪。

我已经尝试使用下面的代码

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? 

        fragmentView = inflater.inflate(R.layout.fragment_search_setting, container, false)

        // set custom back button
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) 

            // navigate to certain destination
            Navigation.findNavController(fragmentView).popBackStack(R.id.destination_create_event, false)


        


        return fragmentView
    

但我收到这样的类型不匹配错误

【问题讨论】:

【参考方案1】:

您必须创建 OnBackPressedCallback 抽象类的新实例并实现其抽象方法。

希望对你有帮助:

        val callback = requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true)
        override fun handleOnBackPressed() 
                        Navigation.findNavController(fragmentView).popBackStack(R.id.destination_create_event, false)
        


    )

    // The callback can be enabled or disabled here or in the lambda


【讨论】:

这不是 OP 所要求的。 OPs 代码很好;我认为它使用了错误的导入。 @ahooee 我试过你的解决方案,但我有这样的错误i.stack.imgur.com/imLjY.png @Alexa289 只需在'return fragmentView'语句之前添加结束的addCallback函数括号即可。见截图:ScreenShot

以上是关于如何使用Android中的导航控制器制作自定义后退按钮以返回某个目的地?的主要内容,如果未能解决你的问题,请参考以下文章

导航栏控制器中的自定义后退按钮

为 UINavigationController 制作自定义后退按钮

使用自定义后退按钮后导航标题消失

自定义导航控制器的后退按钮

自定义后退按钮的可访问性

导航栏中的 Swift 自定义后退按钮