【问题标题】:How to set visibility for an actionbar menu group?如何设置操作栏菜单组的可见性?
【发布时间】:2014-02-05 20:05:17
【问题描述】:

更新

最初我使用的是 ActionBarSherlock,后来我使用原生 android 操作栏创建了一个全新的项目,只是为了测试这一点,但我仍然遇到同样的问题。

我成功地显示/隐藏了项目但不是组。我很快得出结论,ActionBar 中存在错误,无法以编程方式设置组的可见性

更新结束

给定以下菜单访问组时出现空指针异常

<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); 的调用引发空指针异常

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

【问题讨论】:

    标签: android actionbarsherlock


    【解决方案1】:

    终于找到了解决办法 我需要使用传递给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);
    

    【讨论】:

      【解决方案2】:

      简单的一行

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

      【讨论】:

        【解决方案3】:

        Activity你想隐藏的地方使用

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

        【讨论】:

        • 不,仍然得到空指针异常。真的不明白为什么你会认为使用布尔变量而不是硬编码 false 可以防止 mnuTextGroup 变量出现空指针异常?
        • 它在我的情况下工作。我不明白你得到空点异常。
        • 也许您可以分享您的工作应用程序代码?我完全没能完成这项工作,我希望看到一个正在工作的项目
        • 对我来说 menu.setGroupVisible() 不起作用,但它确实起作用了。
        【解决方案4】:

        更改选项菜单需要在onPrepareOptionsMenu 内完成,否则有时不起作用(不知道具体原因,希望其他人能详细说明):

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

        【讨论】:

          猜你喜欢
          • 2012-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 2019-03-05
          • 1970-01-01
          • 1970-01-01
          • 2020-03-13
          相关资源
          最近更新 更多