在我的操作栏中,我有2个菜单项:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/refresh"
android:title="Refresh"
android:icon="@drawable/refresh"
android:showAsAction="ifRoom" >
</item>
<item android:id="@+id/back"
android:title="Back"
android:icon="@drawable/back"
android:showAsAction="ifRoom" >
</item>
</menu>
我正在尝试将“隐藏”我的菜单项“刷新”,当我调用函数refreshinvisible()时,刷新项目消失,但现在操作栏显示两个“后退”项目......为什么? (我正在使用SherlockActionBar)
我的refreshinvisible()函数:
public void refreshinvisible(){
MenuItem item = menu.findItem(R.id.refresh);
item.setVisible(false);
}
任何人都知道如何继续?
答案 0 :(得分:1)
您可以阅读this。
在运行时更改菜单项
创建活动后,即可 onCreateOptionsMenu()方法被调用 只有一次,如上所述。该 系统保留并重新使用菜单 在这个方法中定义直到你的 活动被破坏了。如果你想 之后随时更改选项菜单 它首先创建,你必须覆盖 onPrepareOptionsMenu()方法。 这会传递Menu对象 目前存在。如果,这很有用 你想删除,添加,禁用或 启用菜单项取决于 您申请的当前状态。
E.g。
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem item = menu.findItem(R.id.refresh);
item.setVisible(false);
return true;
}
答案 1 :(得分:1)
有一种名为onPrepareOptionsMenu()的方法,每次在菜单显示之前调用,即在调用 onCreateOptionsMenu()之前。您可以使用活动的invalidateOptionsMenu()方法来触发重绘选项菜单。 因此,您可以根据特定条件轻松地重新创建菜单。
这是一些代码。将两个布尔值定义为类的字段,例如:
private boolean showRefresh;
private boolean showBack;
重写onPrepareOptionsMenu()
方法并根据相应的boolean
设置菜单项的可见性:
@Override
public boolean onPrepareOptionsMenu( Menu menu ) {
super.onPrepareOptionsMenu( menu );
menu.findItem( R.id.refresh ).setVisible( showRefresh );
menu.findItem( R.id.back ).setVisible( showBack );
return true;
}
每次要更改某个菜单项的可见性时都不相应,请相应地设置相应的boolean
并调用invalidateOptionsMenu()
方法。