How to change menu item text dynamically in Android How to change menu item text dynamically in Android android android

How to change menu item text dynamically in Android


I would suggest keeping a reference within the activity to the Menu object you receive in onCreateOptionsMenu and then using that to retrieve the MenuItem that requires the change as and when you need it. For example, you could do something along the lines of the following:

public class YourActivity extends Activity {  private Menu menu;  private String inBedMenuTitle = "Set to 'In bed'";  private String outOfBedMenuTitle = "Set to 'Out of bed'";  private boolean inBed = false;  @Override  public boolean onCreateOptionsMenu(Menu menu) {    super.onCreateOptionsMenu(menu);    // Create your menu...    this.menu = menu;    return true;  }  private void updateMenuTitles() {    MenuItem bedMenuItem = menu.findItem(R.id.bedSwitch);    if (inBed) {      bedMenuItem.setTitle(outOfBedMenuTitle);    } else {      bedMenuItem.setTitle(inBedMenuTitle);    }  }}

Alternatively, you can override onPrepareOptionsMenu to update the menu items each time the menu is displayed.


As JxDarkAngel suggested, calling this from anywhere in your Activity,

invalidateOptionsMenu();

and then overriding:

@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {  MenuItem item = menu.findItem(R.id.bedSwitch);    if (item.getTitle().equals("Set to 'In bed'")) {        item.setTitle("Set to 'Out of bed'");        inBed = false;    } else {        item.setTitle("Set to 'In bed'");        inBed = true;    }  return super.onPrepareOptionsMenu(menu);}

is a much better choice. I used the answer from https://stackoverflow.com/a/17496503/568197


you can do this create a global "Menu" object then assign it in onCreateOptionMenu

public class ExampleActivity extends AppCompatActivity    Menu menu;

then assign here

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    getMenuInflater().inflate(R.menu.menu, menu);    this.menu = menu;    return true;}

Then later use assigned Menu object to get required items

menu.findItem(R.id.bedSwitch).setTitle("Your Text");