Fragment 中添加菜单注意事项

以前一般都是在Activity中添加menu菜单,一般是重写onCreateOptionsMenu和onOptionsItemSelected方法。

现在用fragment用的多了,就在fragment里面添加menu菜单,也是重写了onCreateOptionsMenu和onOptionsItemSelected方法,但是发现没有效果。

好吧,看了下源代码,原来跟一个mHasMenu的boolean变量有关系
1 // If set this fragment has menu items to contribute.
2     boolean mHasMenu;
这个变量控制fragment的menu菜单添加:
01 boolean performCreateOptionsMenu(Menu menu, MenuInflater inflater) {
02         boolean show = false;
03         if (!mHidden) {
04             if (mHasMenu && mMenuVisible) {
05                 show = true;
06                 onCreateOptionsMenu(menu, inflater);
07             }
08             if (mChildFragmentManager != null) {
09                 show |= mChildFragmentManager.dispatchCreateOptionsMenu(menu, inflater);
10             }
11         }
12         return show;
13     }
上面代码说明,如果mHasMenu为false,那么是不会执行onCreateOptionsMenu(menu, inflater)方法的,也就是不会添加fragment的menu菜单。

所以,在fragment中使用menu菜单,需要在onCreate()方法里面添加语句
setHasOptionsMenu(true);

也就是这样:
1 <a href="http://home.51cto.com/index.php?s=/space/5017954" target="_blank">@override</a>
2     public void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setHasOptionsMenu(true);
5     }
嗯,很简单的东西,总结下,希望大家以后不要跟我一样犯错误哈。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值