首页 > 解决方案 > Android 导航组件 - OnNavigateUpListener

问题描述

我想在 Android 导航控制器从特定片段 ( findNavController().navigateUp()) 向上导航时附加一个回调。我怎样才能实现这个功能?

我已经听说过requireActivity().onBackPressedDispatcher.addCallback(this)。这只会听系统的后退按钮而不是工具栏上的后退箭头。我想听听用户按下左上角工具栏上的后退箭头的事件。

标签: androidandroid-architecture-navigationonbackpressednavigationcontrollerup-navigation

解决方案


我设法找到了解决方案。这是我的 MainActivity 的 onCreate() 的样子:

val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
my_toolbar.setupWithNavController(navController, appBarConfiguration)

// The code below solved it for me. It overrides the toolbar back and then calls the OS back which is overridden in my fragment.
my_toolbar.setNavigationOnClickListener {
    onBackPressed()
}

在我的片段中,我在 onActivityCreated() 中执行此操作

requireActivity().onBackPressedDispatcher.addCallback(this) {
    // override custom back
}

现在我可以在一个处理程序中同时覆盖工具栏后退按钮和操作系统后退按钮。


推荐阅读