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

时间:2012-01-27 07:39:21

标签: 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;
}

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

6 个答案:

答案 0 :(得分:128)

将此方法放在Activity

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

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

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

答案 1 :(得分:8)

我将通过以下方式进一步简化Adil的解决方案:

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

答案 2 :(得分:3)

使用public boolean onPrepareOptionsMenu (Menu menu)每当您按下菜单按钮并在那里执行操作时都会调用它。或者在不同的活动中使用你的oncreateoptionsmenu()来膨胀不同的菜单 - 这个菜单只被调用一次。

干杯

答案 3 :(得分:2)

菜单对象具有使用setVisible(boolean)//

设置菜单项目可见性的属性

实施例

private Menu menu_change_language;
...

...

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

    return super.onCreateOptionsMenu(menu);
}

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

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

答案 4 :(得分:1)

如果您想在每次单击菜单时更改onOptionsItemSelected内部的可见性

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

或 菜单中您没有单击的项目

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;
}

答案 5 :(得分:1)

只需执行以下操作即可从此行获取菜单项的ID:

Menu menu =navigationView.getMenu();

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

,而不是通过此行将其显示给您:

nav_dashboard.setVisible(true/false);