以前一般都是在Activity中添加menu菜单,一般是重写onCreateOptionsMenu和onOptionsItemSelected方法。
现在用fragment用的多了,就在fragment里面添加menu菜单,也是重写了onCreateOptionsMenu和onOptionsItemSelected方法,但是发现没有效果。
好吧,看了下源代码,原来跟一个mHasMenu的boolean变量有关系
这个变量控制fragment的menu菜单添加:
上面代码说明,如果mHasMenu为false,那么是不会执行onCreateOptionsMenu(menu, inflater)方法的,也就是不会添加fragment的menu菜单。
所以,在fragment中使用menu菜单,需要在onCreate()方法里面添加语句
setHasOptionsMenu(true);
也就是这样:
嗯,很简单的东西,总结下,希望大家以后不要跟我一样犯错误哈。。
现在用fragment用的多了,就在fragment里面添加menu菜单,也是重写了onCreateOptionsMenu和onOptionsItemSelected方法,但是发现没有效果。
好吧,看了下源代码,原来跟一个mHasMenu的boolean变量有关系
1 | // If set this fragment has menu items to contribute. |
2 | boolean mHasMenu; |
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 | } |
所以,在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 | } |