Fragment中menu菜单注意事项

来源:互联网 发布:趣图制作软件 编辑:程序博客网 时间:2024/09/21 08:55
以前一般都是在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菜单添加:
01boolean performCreateOptionsMenu(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
原创粉丝点击