在导航抽屉项目之间切换后工具栏自定义图标重置

Toolbar custom icon reset after switching between navigation drawer items

所以我将最新的 NavigationView 用于导航抽屉以及自定义工具栏图标。当我启动我的应用程序时,我可以在工具栏(Actionbar)中看到我的自定义图标但是一旦我通过单击导航抽屉中的菜单项切换到不同的片段,我的工具栏就会重置回汉堡包图标并且它永远不会设置我的自定义图标无论我在 NavigationDrawer 项目之间切换多少次,都会返回。在它下面我的代码 -

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = findViewById(R.id.drawer_layout);

        NavigationView navigationView = findViewById(R.id.nav_view);
        View hView = navigationView.getHeaderView(0);


        // Passing each menu ID as a set of Ids because each menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_score, R.id.nav_history,
                R.id.nav_setting)
                .setDrawerLayout(drawer)
                .build();


        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_custom_icon);//your icon here
     

如有需要,请提供其他信息...

  1. 我正在使用新的 material 依赖项 'com.google.android.material:material:1.1.0'
  2. 我的基本应用程序主题是 style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"

我更改了上面代码的顺序以查看是否有任何错误(某些 中建议)。

这是一个expected result

When using NavigationUI, the top app bar helpers automatically transition between the drawer icon and the Up icon as the current destination changes

您可以在您的设置方法后添加OnDestinationChangedListener来设置您自己的图标。

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
            @Override
            public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
                if (destination.getId() == R.id.nav_xxx){
                    getSupportActionBar().setHomeAsUpIndicator(R.drawable....);
                }
            }
        });