How can I alter a MenuItem on the Options Menu on Android? How can I alter a MenuItem on the Options Menu on Android? android android

How can I alter a MenuItem on the Options Menu on Android?


For this type of operation I usually choose not to alter the menu items, but just hide the ones you don't need:

@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {    super.onPrepareOptionsMenu(menu);    menu.findItem(R.id.start).setVisible(!isStarted);    menu.findItem(R.id.stop).setVisible(isStarted);    return true;}


Flygenring answer is correct, but menu.findItem() is laggy and calling it within onPrepareOptionsMenu(Menu menu) produces bad user experience. It's better to get MenuItem object once while creating menu, and then just call setVisible each time menu occures on screen:

    MenuItem mDynamicMenuItem;    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        // Get dynamic menu item        mDynamicMenuItem = menu.findItem(R.id.menu_item);        return true;    }    // Prepare the Screen's standard options menu to be displayed. This is called right     // before the menu is shown, every time it is shown. You can use this method to    // efficiently enable/disable items or otherwise dynamically modify the contents.    @Override    public boolean onPrepareOptionsMenu(Menu menu) {        super.onPrepareOptionsMenu(menu);        // Here is just a good place to update item        mDynamicMenuItem.setVisible(isVisible);        return true;    }


You probably need to call super.onPrepareOptionsMenu after you are finished making your changes. From the docs:

Deriving classes should always call through to the base class implementation.