Set visibility in Menu programmatically android

Android

Android Problem Overview


So, that´s what I wanna know. How can I set the visibility of the menu programatically in Android?? This is how I have my menu:

public boolean onCreateOptionsMenu(Menu menu){
	MenuInflater inflater = getMenuInflater();
	inflater.inflate(R.menu.menu, menu);
	return true;
}

public boolean onOptionsItemSelected (MenuItem item){
	switch (item.getItemId()){
		case R.id.menuregistrar:
			break;
		case R.id.menusalir:
			break;
	}
	return true;
}

But this code is not on the onCreate, so I don´t know how to set one item visible or invisible programmatically (in my case, I want the "menuregistrar" to be invisible once I have registered my application and forever.

Android Solutions


Solution 1 - Android

Put this method in your Activity

public boolean onPrepareOptionsMenu(Menu menu)
{
	MenuItem register = menu.findItem(R.id.menuregistrar);     	
	if(userRegistered) 
	{    		
		register.setVisible(false);
	}
	else
	{
		register.setVisible(true);
	}
	return true;
}

in shorter version you could write:

MenuItem register = menu.findItem(R.id.menuregistrar);     	
register.setVisible(!userRegistered);  //userRegistered is boolean, pointing if the user has registered or not.
return true;

Solution 2 - Android

I would simplify Adil's solution even further with the following:

public boolean onPrepareOptionsMenu(Menu menu)
{
    MenuItem registrar = menu.findItem(R.id.menuregistrar);      
    registrar.setVisible(!isRegistered);
    return true;
}

Solution 3 - Android

Menu Object has a property to set the visibility of a menu's item using setVisible(boolean)//

Example

private Menu menu_change_language;
...

...

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    ...
    ...
    menu_change_language = menu;
    ...
    ...

    return super.onCreateOptionsMenu(menu);
}

use code below for hiding Menu Item:

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}

Solution 4 - Android

Use public boolean onPrepareOptionsMenu (Menu menu) it is called everytime you press the menu button and do your stuff there. or use your oncreateoptionsmenu() in different activities to inflate different menus - this one is called only once.

Cheers

Solution 5 - Android

If you want to change the visibility inside the onOptionsItemSelected whenever you click the menu

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   item.setVisible(true);
   return true;
}

OR for item in the menu that you didn't click on

private Menu globalMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu."menu Xml Name", menu);
   globalMenuItem = menu;
   return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   globalMenuItem.findItem(R.id."id of the menu item").setVisible(true);
   return true;
}

Solution 6 - Android

Simply do one thing get the id of the item of menu from this line:

Menu menu =navigationView.getMenu();

MenuItem nav_dashboard = menu.findItem(R.id.nav_dashboard);

and than make it visible it accourding to you by this line:

nav_dashboard.setVisible(true/false);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionzapotecView Question on Stackoverflow
Solution 1 - AndroidAdil SoomroView Answer on Stackoverflow
Solution 2 - AndroidjakeneffView Answer on Stackoverflow
Solution 3 - AndroidHantash NadeemView Answer on Stackoverflow
Solution 4 - AndroidSergey BennerView Answer on Stackoverflow
Solution 5 - AndroidGuy LuzView Answer on Stackoverflow
Solution 6 - AndroidMukesh RawatView Answer on Stackoverflow