如何设置Actionbar菜单组的可见性



update

最初,我正在使用ActionBarsherlock,此后我使用本机Android Action Bar创建了一个全新的项目来测试这一点,但我仍然遇到同样的问题。

我成功显示/隐藏项目,但没有组。我迅速得出的结论是,动作栏中有一个错误,无法编程设置组的可见性

更新的结尾

在访问组时给定以下菜单,我会得到一个空指针异常

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/action_settings"
        android:title="@string/settings"
        android:orderInCategory="100"
        android:showAsAction="never"/>
        <group android:id="@+id/mnu_text_group"
           android:visible="false">
            <item android:id="@+id/mnu_text_type"
                android:enabled="true" 
                android:visible="true"
                android:icon="@drawable/ic_action_text_icon"
            android:showAsAction="always"> 
            </item>
            <item android:id="@+id/text_color"
                android:enabled="true" 
                android:visible="true" 
                android:showAsAction="always" 
                android:icon="@drawable/ic_action_color_line">
            </item>
        </group>        
    <item android:id="@+id/mnu_images"
...

在相关活动的onprepareoptionsmenu中

public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group);
    mnuImage.setEnabled(mEnableImageMenu);
    mnuTextGroup.setVisible(false);
    ...

mnuTextGroup.setVisible(false);的呼叫提出了无效的指针例外

但是,通过更改查找方法以在组中找到项目的工作正常,例如MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_type);,但显然这仅适用于特定项目。我知道小组的设计目的是为此目的,以便能够设置组中的所有项目的可见性并启用/禁用所有项目,但我无法找到一种程序上的方法。

最终找到了解决方案我需要使用传递到onPrepareOptionsMenu()方法

的菜单对象的setGroupVisible()方法

这对我有用

而不是

MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group);
mnuImage.setEnabled(mEnableImageMenu);
mnuTextGroup.setVisible(false);

这就是我需要的

menu.setGroupVisible(R.id.mnu_text_group, false);

简单而一行

navigationView.getMenu().setGroupVisible(R.id.groupstaff, false);

活动中使用您要隐藏

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main_itemlist, menu);
        boolean isdown = false;
        menu.findItem(R.id.addwork).setVisible(isdown);
        MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group);
            mnuTextGroup.setVisible(isdown);
        return true;
    }

更改选项菜单需要在onPrepareOptionsMenu中完成,否则有时不起作用(不确定为什么,希望别人可以详细说明):

@Override public boolean onPrepareOptionsMenu(Menu menu) {
  super.onPrepareOptionsMenu(menu);
  // set visibility of menu items here
  return true;
}

最新更新