Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to change Action bar icon (hamburger icon) when using navigation drawer with navigation component

I want to change the home up indicator but it doesn't work when using navigation component

I tried the solution from here and didn't work how to change toolbar icon (hamburger icon) when using navigation drawer with jetpack navigation component

My Code

    setSupportActionBar(binding.toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.myTeamFragment,
            R.id.myTasksFragment, R.id.meetingsFragment, R.id.freeTimeFragment, R.id.dashboardFilterFragment)
            .setOpenableLayout(binding.getRoot())
            .build();
    NavigationUI.setupWithNavController(binding.toolbar, getNavController(), appBarConfiguration);

then as Solution Mentioned

ActionBar actionBar = getSupportActionBar();
    getNavController().addOnDestinationChangedListener((controller, destination, arguments) -> {
        if (destination.getId() == R.id.dest0
                || destination.getId() == R.id.dest1
                || destination.getId() == R.id.dest2
                || destination.getId() == R.id.dest3
                || destination.getId() == R.id.dest4){

            actionBar.setHomeAsUpIndicator(R.drawable.ic_hambergur_menu);
        } else {
            actionBar.setHomeAsUpIndicator(R.drawable.ic_hambergure_back);
        }
    });
like image 371
Hussien Fahmy Avatar asked Oct 15 '25 17:10

Hussien Fahmy


2 Answers

You are using a setup with a Toolbar

NavigationUI.setupWithNavController(binding.toolbar, getNavController(), appBarConfiguration);

Then use the Toolbar API instead of ActionBar API:

    navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.nav_home){
            toolbar.setNavigationIcon(R.drawable.xxxx)
        }
    }
like image 101
Gabriele Mariotti Avatar answered Oct 18 '25 06:10

Gabriele Mariotti


I don't know, why? But for me it works with postDelay function. Even if I setup the delay equals zero

 navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.fragment_orders) {
            view.postDelayed(
                {
                    supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_amount)
                },
                0
            )
        }
    }
like image 23
Sergei S Avatar answered Oct 18 '25 07:10

Sergei S



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!