更改操作栏菜单选项卡标签

时间:2014-01-02 17:19:03

标签: android android-actionbar

我想根据代码中变量的状态更改一个操作栏菜单选项卡标签。我发现以下内容描述了如何为此目的使用onPrepareMenuOptions(),但我的问题是在更改控制标签状态的变量后调用onPrepareMenuOptions()。

How can I alter a MenuItem on the Options Menu on Android?

尽可能具体,我有一个dialogFragment,当用户选择相关的Action Bar项时会显示该对话框。该对话框允许用户更改参数,并且根据所选的值,我想更改AB项标签(但不是与AB项或与它启动的dialogFragment相关联的代码。

我应该做些什么(可能在对话框的onDismiss()方法中)强制我的应用程序调用onPrepareMenuOptions()??

为了回应Nate的请求,我的活动有以下代码:

public boolean onCreateOptionsMenu (Menu menu)
{
    getMenuInflater().inflate (R.menu.app_menu, menu);

    this.abMenu = menu;
    this.varTab = abMenu.findItem (R.id.menu_varTab);
        //  Need to be able to change this label

    return super.onCreateOptionsMenu (menu);
}

@Override
public boolean onPrepareOptionsMenu (Menu menu)
{
    varTab.setTitle (0 == importantVariable
        ?   ("Set Var")
        :   ("Set Var\n" + String.valueOf (importantVariable)) + " units");

    return super.onPrepareOptionsMenu (menu);
}

根据好的建议,我将act.invalidateOptionsMenu()添加到与此菜单项关联的dialogFragment的onDismiss()方法中,现在应该调用onPrepareOptionsMenu()。

2 个答案:

答案 0 :(得分:1)

在Android 2.3.x及更低版本中,每次用户打开选项菜单时,系统都会调用onPrepareOptionsMenu()(按菜单按钮)。

在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()。

答案 1 :(得分:0)

我相信 - 如果你在行动栏中使用标签,那么这样的事情应该有效:

bar.getTabAt(0).setText("Some new Sequence");