我有一个包含2个片段的活动。这两个都是ListFragments,并且都为菜单贡献了MenuItems。我有一个MenuItem,我设置了android:showAsAction属性,让它在ActionBar上显示为一个按钮。它工作得很好。
现在,MenuItem依赖于状态。这是一个暂停/恢复菜单选项,用于暂停和恢复队列。我的问题是,在创建片段时,我不知道如何设置它的初始状态。
它的状态取决于队列是否暂停。因此,我有一个AsyncTask,它获取队列并根据队列的状态设置一个布尔值(已暂停)。我调用onPrepareOptionsMenu根据队列的最后一次已知状态来设置Pause菜单项的文本,如果我将MenuItem留在实际菜单中,这将非常有效。你轻触菜单图标,onPrepareOptionsMenu就会被触发,菜单在显示之前就会更新。
问题是,如果我将相同MenuItem放在ActionBar (showAsAction)上,如何在不调用onPrepareOptionsMenu的情况下强制它更新?我需要能够做到这一点,因为在第一次启动应用程序时,我发送了一个获取队列的请求,但任务在ActionBar设置和显示后返回。我在我的片段中创建了一个处理程序,每当我获得队列更新时都会调用它,但是从那里,我如何在ActionBar上更新我的MenuItem的文本呢?我似乎找不到一种方法来让当前设置的菜单来操作它,除了在onPrepareOptionMenu中。
Rob W.
发布于 2011-12-05 21:42:35
在我的例子中: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;
}
发布于 2016-08-23 19:08:08
要刷新片段中的菜单,只需调用:
getActivity().invalidateOptionsMenu();
发布于 2012-07-10 17:18:08
我使用了以下代码:
public boolean onPrepareOptionsMenu (Menu menu) {
MenuInflater inflater = getMenuInflater();
TextView title = (TextView) findViewById(R.id.title);
menu.getItem(0).setTitle(
getString(R.string.payFor) + " " + title.getText().toString());
menu.getItem(1).setTitle(getString(R.string.payFor) + "...");
return true;
}
对我来说很有吸引力你可以找到OnPrepareOptionsMenu here
https://stackoverflow.com/questions/5767570
复制相似问题