使用导航组件将不同菜单与不同片段绑定

Binding different menu with different fragment with Navigation component

我有一个带有 BottomNavigationBar 的 activity。

我默认在工具栏中间显示应用程序徽标。

现在我必须在选择底部导航项之一时在整个工具栏上显示 SearchBar。此外,我想在选择任何其他 bottomNavigation 项目时恢复为默认工具栏视图(中间带有徽标的视图)。

如何使用导航组件执行此操作?

如果我必须使用 ViewSwitcher 或 ActionMode,整个导航组件的想法将不得不放弃,因为我可以自己处理一些片段事务。

帮帮我。

有两种方法可以做到这一点:

1) 让每个 Fragment 实现自己的工具栏

这种方法为您提供了每个 Fragment 负责的最大灵活性,但如果您有许多不同类型的 Fragment 或需要每个 Fragment 不同的滚动行为,则更适合。

2) 使用 OnNavigatedListener 更改 Activity 的工具栏

NavController 允许您附加任意数量的 OnNavigatedListener 个实例,只要当前目的地/项目发生变化,它就会给您一个回调。

这允许您在 Activity 中编写代码,例如:

navController.addOnNavigatedListener { navController, destination ->
  if (destination.id == R.id.search_destination) {
    // Update your Toolbar to be a SearchBar
  } else {
    // Reset it back to a standard Toolbar
  }
}