Fragment中menu菜单注意事项

来源:互联网 发布:网络律师 编辑:程序博客网 时间:2024/05/01 14:00







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

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

好吧,看了下源代码,原来跟一个mHasMenu的boolean变量有关系
1// If set this fragment has menu items to contribute.
2   booleanmHasMenu;
这个变量控制fragment的menu菜单添加:
01booleanperformCreateOptionsMenu(Menu menu, MenuInflater inflater) {
02        booleanshow = 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        returnshow;
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   publicvoid onCreate(Bundle savedInstanceState) {
3        super.onCreate(savedInstanceState);
4        setHasOptionsMenu(true);
5   }
嗯,很简单的东西,总结下,希望大家以后不要跟我一样犯错误哈。。


0 0