我正在使用支持库中的ActionBar。我想在运行时更改一个MenuItem
的可见性。在大多数情况下,这样可以正常工作,但有时隐藏不能按预期工作。我使用以下代码来更改可见性:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean show = /* some condition */
myMenuItem.setVisible(show); // I got myMenuItem from onCreateOptionsMenu()
return superRetVal;
}
正如我所说,这适用于大多数情况。但是,如果我创建FragmentTransaction然后调用invalidateOptionsMenu()
,它有时会出错。错误是图标本身被隐藏,因为show == false
,但空间仍然被阻止(就像设置View.setVisibility(View.INVISIBLE)
时一样)。在下面的屏幕显示中,您可能会看到空间仍然被阻止。我用红色框突出显示了未使用但被阻止的空间。发生此错误一次之后,我只能通过单击溢出菜单来摆脱它。在那之前,没有MenuItem.setVisible()
会产生任何影响。
这里有什么问题?
谢谢!
修改
项目menu_to_current
导致问题:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:malaka="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/menu_to_current"
android:orderInCategory="100"
android:title="To Current"
android:icon="@drawable/ic_menu_current"
malaka:showAsAction="always"
android:visible="false"/>
<item
android:id="@+id/menu_show_buttons"
android:orderInCategory="100"
android:title="Show Buttons"
malaka:showAsAction="never"/>
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:title="Settings"
android:icon="@android:drawable/ic_menu_preferences"
malaka:showAsAction="never"/>
</menu>
EDIT2
我正在测试模拟器api 16.我现在另外在真实设备api 10,真实设备api 18,模拟器api 18上进行了测试。而且错误只发生在模拟器api 16.不幸的是我没有真正的设备api 16可用于测试一下。
答案 0 :(得分:0)
我有可能在另一台机器上设置新的模拟器。错误没有发生;这个问题是由我使用的模拟器的问题引起的。谢谢你的回复。