我想根据代码中变量的状态更改一个操作栏菜单选项卡标签。我发现以下内容描述了如何为此目的使用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()。
答案 0 :(得分:1)
在Android 2.3.x及更低版本中,每次用户打开选项菜单时,系统都会调用onPrepareOptionsMenu()(按菜单按钮)。
在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,必须调用invalidateOptionsMenu()以请求系统调用onPrepareOptionsMenu()。
答案 1 :(得分:0)
我相信 - 如果你在行动栏中使用标签,那么这样的事情应该有效:
bar.getTabAt(0).setText("Some new Sequence");