当前位置: 首页 > 知识库问答 >
问题:

为什么Android操作菜单项不更新

鱼浩荡
2023-03-14

我已经为消息创建了一个操作栏项,当收到新消息时,它应该被更新。问题是,当我刷新活动时,它有时会将图标显示为新消息,有时则不会显示新消息。这是随机发生的。它没有正确更新。我检查了如何更新ActionBar中显示的菜单项?

但无法解决我的问题。我意识到问题是onCreateOptionMenu在oncreate时执行。我如何延迟?

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.loggedmenu, menu);


    int no;

    try {
        no = Integer.parseInt(noOfmsgs);
    } catch (NumberFormatException e) {
        no = 0;
    }

    if (no > 0) {
        menu.findItem(R.id.messages)
                .setIcon(R.drawable.ic_action_new_email);
    } else {
        menu.findItem(R.id.messages).setIcon(R.drawable.ic_action_email);
    }

    return true;
}

共有1个答案

解修然
2023-03-14

正如您所说,一旦活动被创建,就会调用onCreateOptionsMenu,仅此而已,至少您可以调用validateOptionsMenu()来再次获取此方法。但是,您可以在活动中设置一个全局变量以稍后更新您的项目,如下所示:

// global var menu
private Menu mMenu;

// onCreate, onResume, etc.

// Init the var
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     this.mMenu = menu;
     getMenuInflater().inflate(R.menu.loggedmenu, menu);
     return true;
}  

然后,在执行异步任务、线程或任何更新noOfmsgs值的操作后,调用此方法:

// update the items
private void updateMenuItems() {
    int no;
    try {
        no = Integer.parseInt(noOfmsgs);
    } catch (NumberFormatException e) {
        no = 0;
    }
    if (no > 0) {
        mMenu.findItem(R.id.messages).setIcon(R.drawable.ic_action_new_email);
    } else {
        mMenu.findItem(R.id.messages).setIcon(R.drawable.ic_action_email);
    }
} 
 类似资料:
  • 如何从操作栏禁用“选项”菜单项? 我做了我自己的自定义栏,用于显示*. png标志,但我不想显示选项菜单的三个点按钮。 我试图找到一些解决办法,但没有任何效果。

  • 我试图实现的是,当我的EditText为空时,操作菜单中的MenuItem应该被禁用。我在onCreateOptionsMenu方法中展开菜单,然后禁用onPrepareOptionsMenu方法中的Send按钮并保存对菜单的引用,这样我就可以在onCreate方法中设置的TextWatcher中使用它。 这段代码工作正常,在屏幕方向改变之前,它会做它应该做的事情。我知道当这种情况发生时,活动会被

  • 有没有一种方法来显示在操作栏中的HoneyComb菜单项之间的分隔符。 有些帖子说,只有当菜单项具有android时,分隔符才会显示: show AsAction="with Text"。 我想只显示图标,而不是文本。 我通过实现一个操作栏兼容性,成功地展示了Pre-HoneyComb的分隔器。 我不想使用ActionBarSherlock在这篇文章中给出的Android actionbar sh

  • ActionSheet 操作菜单 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过list设置需要显示的菜单,该值为一个数组,元素为对象,对象至少要提供text属性,另外可选的有fontSize(字体大小),color(颜色),disabled(是否禁用,1.5.6引入), subText(描述信息,1.6.8引入

  • 连接到当地的redis,Lestuce需要近5000ms,但Jedis只需要30ms。我指的是以下示例ConnectToRedis 2020-08-14 17:02:28.236信息21760--[main]com.example.demo.jedisrunner:jedis:27 ms 2020-08-14 17:02:33.318信息21760--[main]com.example.demo.

  • 我有一个活动有3个碎片(不是标签)。我有几个动作条项目,我想隐藏他们时,某个片段是存在的。我该怎么做呢?