更新
最初我使用的是ActionBarSherlock,后来我创建了一个全新的项目,使用原生的Android action bar进行测试,但仍然遇到同样的问题。
我已经成功地显示/隐藏了项目,但无法显示/隐藏组。我很快得出结论:ActionBar中存在一个bug,因此无法通过编程方式设置组的可见性。
更新结束
给定以下菜单,访问该组时会导致空指针异常。
<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);
但这显然仅适用于特定项目。 我知道组的设计目的就是为了能够以编程方式设置组内所有项目的可见性和启用/禁用,但我一直无法找到一种实现它的方法。