以前一般都是在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 | } |
Fragment中启用Menu菜单
本文介绍了在Android开发中如何在Fragment内正确启用和显示上下文菜单。通过设置`setHasOptionsMenu(true)`确保了Fragment能够响应菜单创建事件。
1695

被折叠的 条评论
为什么被折叠?



