How to change MenuItem icon in ActionBar programmatically How to change MenuItem icon in ActionBar programmatically android android

How to change MenuItem icon in ActionBar programmatically


You can't use findViewById() on menu items in onCreate() because the menu layout isn't inflated yet. You could create a global Menu variable and initialize it in the onCreateOptionsMenu() and then use it in your onClick().

private Menu menu;

In your onCreateOptionsMenu()

this.menu = menu;

In your button's onClick() method

menu.getItem(0).setIcon(ContextCompat.getDrawable(this, R.drawable.ic_launcher));


Lalith's answer is correct.

You may also try this approach:

button.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            invalidateOptionsMenu();        }    }); @Override public boolean onPrepareOptionsMenu(Menu menu) {    MenuItem settingsItem = menu.findItem(R.id.action_settings);    // set your desired icon here based on a flag if you like    settingsItem.setIcon(ContextCompat.getDrawable(this, R.drawable.ic_launcher));     return super.onPrepareOptionsMenu(menu); }


This works for me. It should be in your onOptionsItemSelected(MenuItem item) method item.setIcon(R.drawable.your_icon);