使用 NavigationComponent 和 BottomNavigationView 隐藏工具栏后退箭头

Hide Toolbar back arrow with NavigationComponent and BottomNavigationView

我正在实施与 BottomNavigationView 结合的 NavigationComponent,我注意到工具栏中显示了所有片段目的地的后退箭头,导航图中指定为 startDestination 的片段目的地除外.

我能够找到的此实现的所有示例都显示出类似的行为。在我看来,为 BottomNavigationView 的每个关联片段隐藏后退箭头似乎是一种更自然的设计(点击工具栏中的后退箭头以从选项卡 2 导航到选项卡 1 对我来说感觉很奇怪,我以前从未见过这种情况) .

有关示例以及我希望实现的目标,请参见下图。 有什么方法可以做到这一点?

使用 getActionBar().setDisplayHomeAsUpEnabled(false) 从工具栏中删除 home/back 按钮

如果您使用的是 AppBarConfiguration 应该是这样的。

val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.homeFragment,
                R.id.dashboardFragment,
                R.id.notificationsFragment
            )
        )

setupActionBarWithNavController(navController!!, appBarConfiguration!!)

这意味着您的所有片段都是顶级目的地。

注意,当您回击时,您将退出应用程序(或者如果配置到第一个片段,例如在 BottomSheets 中您会出现这种行为)。所以如果你需要另一种情况,你应该为每个片段

配置onBackPressed

删除向后箭头图标的简单方法是设置目标更改侦听器,如果 目的地 ID == R.id.fragmentYouWantRemoveArrawBack setNavigationIcon(null);

EX:

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
        @Override
        public void onDestinationChanged(@NonNull NavController controller,
                                         @NonNull NavDestination destination,
                                         @Nullable Bundle arguments) {

            if (destination.getId() == R.id.myChiehkFrament) {
                findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.VISIBLE);
                toolbar.setNavigationIcon(null);
            } else {
                findViewById(R.id.chat_toolbar_constraintL).setVisibility(View.GONE);
            }
        }});

kotlin

中这样做
    navController.addOnDestinationChangedListener { _, destination, _ ->
        if (destination.id == R.id.searchFragment) {
            binding.toolbar.navigationIcon = null
        } else {
        }
    }