更新
最初我使用的是ActionBarSherlock我已经使用原生的android操作栏创建了一个全新的项目来测试这个,我仍然遇到同样的问题。
我成功显示/隐藏了项目,但没有成功显示。我很快得出结论,ActionBar中存在一个错误,无法以编程方式设置组的可见性
END更新
给出以下菜单访问Group时,我得到一个空指针异常
<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);
但显然这仅适用于特定项目。我知道组的设计正是为了这个目的,能够设置组的可见性并启用/禁用组内的所有项目,但我一直无法找到以编程方式执行此操作的方法。
答案 0 :(得分:35)
终于找到了解决方案
我需要使用传递到setGroupVisible()
方法
onPrepareOptionsMenu()
方法
这对我有用
而不是
MenuItem mnuTextGroup = menu.findItem(R.id.mnu_text_group);
mnuImage.setEnabled(mEnableImageMenu);
mnuTextGroup.setVisible(false);
这就是我需要的
menu.setGroupVisible(R.id.mnu_text_group, false);
答案 1 :(得分:2)
简单而一行
navigationView.getMenu().setGroupVisible(R.id.groupstaff, false);
答案 2 :(得分:0)
使用活动您要隐藏的位置
@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;
}
答案 3 :(得分:0)
更改选项菜单需要在onPrepareOptionsMenu
内完成,否则有时无法正常工作(不确定原因,希望其他人可以详细说明):
@Override public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// set visibility of menu items here
return true;
}