图标setVisible复制菜单

时间:2013-02-04 17:10:24

标签: android android-actionbar actionbarsherlock

在我的操作栏中,我有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);
}  

任何人都知道如何继续?

2 个答案:

答案 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()方法。