关于 fragment重写onCreateOptionsMenu不执行问题

本文探讨了解决Android应用中onCreateOptionsMenu方法未被调用的问题,主要从三个方面进行分析:确保在Fragment中调用了setHasOptionsMenu(true),检查是否在其他方法中意外拦截了菜单事件,以及解决因使用NoActionBar主题而导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这种情况大概有三种原因导致

1、就是在fragment中重写onCreateOptionsMenu必须要调用setHasOptionsMenu(true)方法

所以你需要在create方法创建的时候设置setHasOptionsMenu(true)

2、事件被其他的方法拦截或者屏蔽了menu菜单,从而导致onCreateOptionsMenu方法不执行

所以你需要去检查自己写的方法前后没有这种情况,一般情况都是在重写onKeyDown的方法被拦截了

修改改方法的返回即可

  1. / 监听返回键,退出程序  
  2.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  3.         if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
  4.             wifiHotManager.closeAWifiHot();  
  5.             this.finish();  
  6.             return true;//①  
  7.         }  
  8.         return true;//②  
  9.     }  
比如这里第二个return true 这里,就会导致onCreateOptionsMenu不执行

3、主题原因导致,因为这个方法是Android会自动去寻找当前的ActionBar,但是我们有的时候自定义主题设置的parent是NoActionBar,所以这里系统回调的时候发现,既然是没有NoAcitonBar,自然也就不会去执行onCreateOptionsMenu方法

解决方法:修改含有ActionBar的主题,或者在Activity中设置setSupportActionBar();

private  void initToolbar() {
    mToolbar.setTitle("");
    ((HomePageActivity) getActivity()).setSupportActionBar(mToolbar);
}
前两种借鉴与网上的这篇博客http://blog.youkuaiyun.com/jason0539/article/details/23625189

但是发现并不适用与自己的项目,仔细查找后发现是第三种情况


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值