为什么 AppCompatActivity.onMenuOpened(int featureId, Menu menu) 的菜单为 null?

2023-11-30

Android 应用程序具有以下代码:

public class FooActivity extends AppCompatActivity{
   @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
    }
}

当点击3点溢出菜单按钮时,菜单正常显示,调用了这个MenuOpened(int featureId, Menu menu),但menu为null。这是正常的吗?


当您单击菜单图标时onMenuOpened被调用两次:第一次是立即调用,然后是在菜单准备好时调用。显然第一次它是空的,因为它没有准备好。因此,如果您想在此回调中访问菜单 - 只需检查它是否为空,如果不是则执行操作。

简单实验:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("first");
        menu.add("second");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d("tag", "onPrepareOptionsMenu called");
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        Log.d("tag", "onMenuOpened called");
        if(menu!=null) {
            Log.d("tag", "menu is ready");
        } else {
            Log.d("tag", "menu is null yet");
        }
        return super.onMenuOpened(featureId, menu);
    }
}

单击菜单图标时的输出:

D/tag: onMenuOpened called
D/tag: menu is null yet
D/tag: onPrepareOptionsMenu called
D/tag: onMenuOpened called
D/tag: menu is ready
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 AppCompatActivity.onMenuOpened(int featureId, Menu menu) 的菜单为 null? 的相关文章

随机推荐

  • 为什么他们在 Mongoose Population 示例中使用 ObjectId 和 Number?

    In this例如 他们创建personSchema using ObjectId来参考Story我明白这一点 但随后在storySchema他们为什么不做同样的事情来引用这个人呢 或者反过来 为什么在 Person 中使用 ObjectI
  • 获取表的列名并将它们存储在字符串或var中c#asp.net

    我想知道如何获取数据库表的列并将它们存储在字符串或字符串数 组中 我有以下代码 但我相信它不起作用 我正在使用 asp net 中给出的默认表 我已经能够毫无问题地写入该表 但我不知道如何从中选择并保存检索到的值 这是我后面的代码中的内容
  • 传递类方法而不是 std::sort 中的函数

    在一个类中 我试图通过传递同一类的方法来对向量进行排序 但是编译的时候会报错 谁能告诉我问题是什么吗 谢谢你 它给出以下错误 类型参数bool Sorter D D does not match书 排序器 D D c 我也尝试过使用sort
  • tao SimpleOpenGlControl 错误

    我正在创建一个包含 Tao Platform Windows SimpleOpenGlControl 的用户控件 在我的控件的构造函数中 我有 InitializeComponent simpleOpenGlControl1 Initial
  • 将 javascript 变量发送到经典 asp

    我有一个基于 jQuery 的成本计算器 我希望网页能够通过电子邮件发送计算 器值的摘要 服务器在经典 ASP 上运行 如何使用 ASP 检索 javascript 变量 据我了解 ASP 代码在页面加载之前运行 而 javascript
  • Python Opencv 和 Sockets - 以 h264 编码的流视频

    所以我正在尝试制作一个流媒体 将视频从局域网上的一台计算机流式传输到另一台计算机 或目前同一台计算机 我需要它使用尽可能少的带宽 所以我尝试用 h264 进行编码 我在做这件事时遇到了困难 我真的不知道从哪里开始 现在它是用jpg编码的 并
  • 计算某个项目在多列中每一列中出现的次数

    我想读取一个表并创建另一个表来计算唯一 ID 在多个特定列中出现的次数 例如 我有一个表 其中每一行显示一个事务 并用一个 userId 标识每个人的角色 buyer lt c A A B A B C seller lt c C B C B
  • 不使用 #define 定义 BIT0、BIT1、BIT2 等

    在C 中是否可以在不使用 define的情况下以另一种方式定义BIT0 BIT1 BIT2 define BIT0 0x00000001 define BIT1 0x00000002 define BIT2 0x00000004 然后我采用
  • 使用 python 编辑 tfvars 文件

    我不知道我问的是否是正确的组 但是有没有办法使用 python 编辑 tfvars 例如 我有一个 tfvars 文件 其中一些变量具有以下值 owner operations port number 80 我想编辑port number
  • Apache Shiro JdbcRealm 与 JavaConfig 和 Spring Boot

    我正在尝试配置我的 Spring Boot 应用程序以使用 Apache Shiro 作为其安全框架 我已经完成了与 PropertiesRealm 一起使用的所有操作 现在我正在尝试使其与 JdbcRealm 和 Spring Boot
  • 是否可以在android上通过textview显示纯html代码

    我正在尝试在我的 Android 应用程序上使用 TextView 显示 HTML 字符串 我很好奇如何才能通过 TextView 显示内联样式的 HTML 由于某些原因 我们不能使用 WebView 来实现此目的 GitHub 上是否有您
  • 错误:无法确定 --prod 中类 OverlayPortal 的模块

    我不确定我只面临一个问题ionic cordova run android prod and my ionic cordova run android工作正常 ERROR Error Cannot determine the module
  • 将表达式计算为字符串,返回对象?

    基本上我有一些代码 当它发生时 我需要将某个对象设置为等于某个表达式 所有这些 做什么 爵士乐都存储为字符串 所以我解析它 并使用反射来查找我正在执行此操作的对象 现在我需要找出如何将值存储到该对象 问题是该值可能是 1 1 5 2 或 某
  • 如何使用 Puppeteer 计算页面完全加载时间?

    我试图使用 Node 中的 puppeteer 在几秒钟内获得页面完全加载时间 为此我对 API 和其他问题进行了一些研究 并创建了以下代码 First Configuration puppeteer launch defaultViewp
  • 从字符串 java 中检索值的最佳方法

    如果我传递一个包含逗号分隔的键值对的字符串 如下所示 seller 1000 country canada address 123 1st st etc 似乎一定有比解析然后迭代更好的方法 根据 Java 中的键名从该字符串中检索值的最佳方
  • 通过 XMLStarlet 取消与符号 (&) - Bugging &

    这是一个相当烦人但更简单的任务 根据这个guide 我写了这个 bin bash content wget https example com O ampersand echo xmllint html xpath id table tbo
  • 了解否定字符类

    正则表达式 f g 当应用于字符串时 don t theater but not d and not do f 也匹配三个撇号do f 为什么是 f 不排除吗 PS 我想找到连续的两个或多个撇号 后面不是f The 使正则表达式引擎回溯一次
  • Paramiko 在尝试 Vyatta 的非标准命令时出现“无效命令”

    我刚刚尝试使用 Paramiko 进行 SSH 连接我的 Python Django 应用程序与 Vyatta 服务器 不幸的是 当我尝试跑步时show interfaces它抛出 无效命令 但是 如果尝试从该服务器手动进行 SSH 则效果
  • 总结多个文件中的列值

    我这里有一个小问题 我试图总结多个文件 50 中的条目 每个文件包含 3 列 例如 使用前 3 个文件 file1 txt file2 txt file3 txt 如下所示 文件1 txt 2 3 4 1 5 6 5 4 7 文件2 txt
  • 为什么 AppCompatActivity.onMenuOpened(int featureId, Menu menu) 的菜单为 null?

    Android 应用程序具有以下代码 public class FooActivity extends AppCompatActivity Override public boolean onMenuOpened int featureId