Fragment中menu菜单注意事项

以前一般都是在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菜单添加:
01boolean 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    }
嗯,很简单的东西,总结下,希望大家以后不要跟我一样犯错误哈。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值