首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何更新ActionBar中显示的菜单项?

如何更新ActionBar中显示的菜单项?
EN

Stack Overflow用户
提问于 2011-04-24 07:07:12
回答 5查看 106.2K关注 0票数 96

我有一个包含2个片段的活动。这两个都是ListFragments,并且都为菜单贡献了MenuItems。我有一个MenuItem,我设置了android:showAsAction属性,让它在ActionBar上显示为一个按钮。它工作得很好。

现在,MenuItem依赖于状态。这是一个暂停/恢复菜单选项,用于暂停和恢复队列。我的问题是,在创建片段时,我不知道如何设置它的初始状态。

它的状态取决于队列是否暂停。因此,我有一个AsyncTask,它获取队列并根据队列的状态设置一个布尔值(已暂停)。我调用onPrepareOptionsMenu根据队列的最后一次已知状态来设置Pause菜单项的文本,如果我将MenuItem留在实际菜单中,这将非常有效。你轻触菜单图标,onPrepareOptionsMenu就会被触发,菜单在显示之前就会更新。

问题是,如果我将相同MenuItem放在ActionBar (showAsAction)上,如何在不调用onPrepareOptionsMenu的情况下强制它更新?我需要能够做到这一点,因为在第一次启动应用程序时,我发送了一个获取队列的请求,但任务在ActionBar设置和显示后返回。我在我的片段中创建了一个处理程序,每当我获得队列更新时都会调用它,但是从那里,我如何在ActionBar上更新我的MenuItem的文本呢?我似乎找不到一种方法来让当前设置的菜单来操作它,除了在onPrepareOptionMenu中。

Rob W.

EN

回答 5

Stack Overflow用户

发布于 2011-12-05 21:42:35

在我的例子中:invalidateOptionsMenu只是将文本重新设置为原始文本,但直接访问菜单项并重写所需的文本没有问题:

代码语言:javascript
复制
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();
    }
}

由于下面的注释,我能够通过以下代码访问菜单项:

代码语言:javascript
复制
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.magazine_swipe_activity, menu);
    mnuTopMenuActionBar_ = menu;
    return true;
}
票数 14
EN

Stack Overflow用户

发布于 2016-08-23 19:08:08

要刷新片段中的菜单,只需调用:

代码语言:javascript
复制
getActivity().invalidateOptionsMenu();
票数 12
EN

Stack Overflow用户

发布于 2012-07-10 17:18:08

我使用了以下代码:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5767570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档