如何更新ActionBar中显示的菜单项?
我有一个有2个片段的活动。 两者都是ListFragments,并且都向Menu提供MenuItems。 我有一个MenuItem,我已经将属性android:showAsAction设置为在ActionBar上显示为按钮。 哪些工作正常。
现在MenuItem是状态相关的。 这是暂停/恢复菜单选项,用于暂停和恢复队列。 我的问题是我无法弄清楚如何在创建Fragment时设置它的初始雕像。
它的状态取决于队列是否暂停。 所以我有一个AsyncTask获取队列并根据队列的状态设置布尔值(暂停)。 我打电话onPrepareOptionsMenu根据队列的最后一个已知状态设置Pause菜单项的文本,如果我在实际菜单中离开MenuItem,这很有用。 点击菜单图标,onPrepareOptionsMenu被触发,菜单在显示之前被更新。
问题是,如果我将相同的MenuItem放在ActionBar(showAsAction)上,我如何强制它更新而不必调用onPrepareOptionsMenu? 我需要能够这样做,因为在首次启动应用程序时,我发送了获取队列的请求,但是在安装并显示ActionBar后任务返回。 我在我的片段中创建了一个处理程序,每次获取队列更新时都会调用该处理程序,但是从那里可以如何更新ActionBar上的MenuItem的文本? 我似乎无法找到一种方法来获取当前设置的菜单来操作它,除了onPrepareOptionMenu。
罗布瓦特
选项#1:尝试invalidateOptionsMenu()
。 我不知道这是否会强制立即重新绘制操作栏。
选项2:查看getActionView()
是否为受影响的MenuItem
返回任何内容。 showAsAction
可能会自动为您创建动作视图。 如果是这样,你可以推测启用/禁用该View
。
我似乎无法找到一种方法来获取当前设置的菜单来操作它,除了onPrepareOptionMenu。
你可以挂在你交给onCreateOptionsMenu()
的Menu
对象上。 引用文档:
您可以放心地按住菜单(以及从中创建的任何项目),根据需要对其进行修改,直到下次调用onCreateOptionsMenu()。
在我的情况下: invalidateOptionsMenu
只是将文本重新设置为原始文本,但直接访问菜单项并重新编写想要的文本可以毫无问题地工作:
if (mnuTopMenuActionBar_ != null) {
MenuItem mnuPageIndex = mnuTopMenuActionBar_
.findItem(R.id.menu_magazin_pageOfPage_text);
if (mnuPageIndex != null) {
if (getScreenOrientation() == 1) {
mnuPageIndex.setTitle((i + 1) + " von " + pages);
}
else {
mnuPageIndex.setTitle(
(i + 1) + " + " + (i + 2) + " " + " von " + pages);
}
// invalidateOptionsMenu();
}
}
由于下面的评论,我可以通过以下代码访问菜单项:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.magazine_swipe_activity, menu);
mnuTopMenuActionBar_ = menu;
return true;
}
要从Fragment中刷新菜单,只需调用:
getActivity().invalidateOptionsMenu();
链接地址: http://www.djcxy.com/p/63905.html