以编程方式在菜单中设置可见性

zap*_*tec 50 android

所以,这就是我想知道的.如何在Android中以编程方式设置菜单的可见性?这就是我的菜单:

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;
}
Run Code Online (Sandbox Code Playgroud)

但是这个代码不在onCreate上,所以我不知道如何以编程方式设置一个项目可见或不可见(在我的情况下,我希望"menuregistrar"在我注册我的应用程序后永远不可见.

Adi*_*mro 134

把这个方法放在你的 Activity

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

在较短的版本中你可以写:

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

  • 两个提示:1.你可以通过编写`register.setVisible(userNotRegistered);`2来加强它.2.布尔变量通常是正数,即`if(!userRegistered)`.`if(!UsersNotRegistered)`很难理解:如果用户没有注册? (3认同)
  • 如果用户已打开菜单,您可能还需要执行`invalidateOptionsMenu();`来刷新菜单. (2认同)

jak*_*eff 9

我将进一步简化Adil的解决方案,具体如下:

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


小智 6

只需做一件事,从这一行获取菜单项的 id:

Menu menu =navigationView.getMenu();

MenuItem nav_dashboard = menu.findItem(R.id.nav_dashboard);
Run Code Online (Sandbox Code Playgroud)

然后根据您的意愿通过这一行使其可见:

nav_dashboard.setVisible(true/false);
Run Code Online (Sandbox Code Playgroud)


小智 5

菜单对象具有使用 setVisible(boolean)// 设置菜单项的可见性的属性

例子

private Menu menu_change_language;
...

...

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

    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

使用下面的代码隐藏菜单项:

if(menu_change_language != null){                 
    menu_change_language.findItem(R.id.menu_change_language)
       .setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)