ActionBar中动态控制操作/菜单项

8

有没有一种动态禁用、隐藏、添加/删除操作栏菜单项的方法?例如,在活动中,只有在用户填写了有效的电话号码后,才能启用一个操作。

我在ActionBar API中没有找到任何有用的方法,唯一的方法似乎是使用自定义视图。

2个回答

20

要告诉ActionBar刷新其菜单项:invalidateOptionsMenu()

然后启用/禁用菜单项:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item= menu.findItem(R.id.men_1);
    //depending on your conditions, either enable/disable
    item.setEnabled(false);
    super.onPrepareOptionsMenu(menu);
    return true;
}

而要隐藏操作栏,您可以使用以下代码:

getActionBar().hide();

1
onPrepareOptionsMenu 必须返回 boolean 值,你必须返回 true 才能显示菜单;如果你返回 false,它将不会被显示。 - Mickey Tin
7
如果您正在使用支持库和 ActionBarActivity,则需要使用 supportInvalidateOptionsMenu() - IT-Dan

0
另一个选项是:在 Activity 中存储菜单字段。这样,您可以从任何地方调用 getMenuInflater().inflate() 和 menu.clear() 方法。因此,代码看起来像这样:
class MyActivity extends ActionBarActivity {

    Menu actionBar;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        actionBar = menu;
        return true;
    }

    //Possible usage
    void showActionBar1 () {
        getMenuInflater().inflate(R.menu.menu_1, actionBar);
        actionBar.findItem(R.id.menu_1_btn_1).setOnMenuItemClickListener();
    }

    void showActionBar2 () {
        getMenuInflater().inflate(R.menu.menu_2, actionBar);
        ...
    }

    void clearActionBar () {
        if (actionBar != null) actionBar.clear();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接