使用导航组件将具有不同片段的不同菜单绑定

use*_*816 2 android kotlin android-toolbar android-jetpack android-architecture-navigation

我有一个BottomNavigationBar活动。

默认情况下,我在工具栏的中间显示应用程序徽标。

现在,当选择bottomNavigation项之一时,我必须在整个工具栏上显示SearchBar。另外,在选择任何其他bottomNavigation项时,我想还原为默认的工具栏视图(中间带有徽标)。

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

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

帮帮我

ian*_*ake 5

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

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

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

2)使用OnNavigatedListener更改您活动的工具栏

NavController允许您附加任何数量的OnNavigatedListener情况下,给你一个回调只要在当前目标/项目改变。

这使您可以在“活动”中编写代码,例如:

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
  }
}
Run Code Online (Sandbox Code Playgroud)