Android: How to enable/disable option menu item on button click? Android: How to enable/disable option menu item on button click? android android

Android: How to enable/disable option menu item on button click?


Anyway, the documentation covers all the things.

Changing menu items at runtime

Once the activity is created, the onCreateOptionsMenu() method is called only once, as described above. The system keeps and re-uses the Menu you define in this method until your activity is destroyed. If you want to change the Options Menu any time after it's first created, you must override the onPrepareOptionsMenu() method. This passes you the Menu object as it currently exists. This is useful if you'd like to remove, add, disable, or enable menu items depending on the current state of your application.

E.g.

@Overridepublic boolean onPrepareOptionsMenu (Menu menu) {    if (isFinalized) {        menu.getItem(1).setEnabled(false);        // You can also use something like:        // menu.findItem(R.id.example_foobar).setEnabled(false);    }    return true;}

On Android 3.0 and higher, the options menu is considered to always be open when menu items are presented in the action bar. When an event occurs and you want to perform a menu update, you must call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().


On all android versions, easiest way: use this to SHOW a menu action icon as disabled AND make it FUNCTION as disabled as well:

@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {    MenuItem item = menu.findItem(R.id.menu_my_item);    if (myItemShouldBeEnabled) {        item.setEnabled(true);        item.getIcon().setAlpha(255);    } else {        // disabled        item.setEnabled(false);        item.getIcon().setAlpha(130);    }}


You could save the item as a variable when creating the option menu and then change its properties at will.

private MenuItem securedConnection;private MenuItem insecuredConnection;@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.connect_menu, menu);    securedConnection = menu.getItem(0);    insecuredConnection =  menu.getItem(1);    return true;}public void foo(){       securedConnection.setEnabled(true);}