Fragment中添加menu

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fragment中添加menu相关的知识,希望对你有一定的参考价值。

参考技术A

Fragment是Android里面中一个非常灵巧的设计,它可以看做ui模块,由活动托管。熟练的使用它们能优雅的实现很复杂的界面,而且用它们编写UI界面,相对于用一个个Activity所消耗内存少得多,而且切换很流畅,可以参考知乎客户端。

但是,Fragment使用过程中会出现一些小问题,这里讲如何在Fragment中添加menu。我们都知道在活动中添加menu只用编写好menu,在onCreateOptionsMenu中加载,并在onOptionsItemSelected中处理点击事件就可以了,按照这个流程先试下

首先编写menu.xml

这里只添加一个设置的menu item

然后要加载menu需要toolbar或actionbar,这里分两种情况:

然后再调用onCreateOptionsMenu加载到toolbar上

运行一下,你会发现两种情况下menu都没加载出来。原来要在fragment中加载menu还需在其onCreate中加一句 setHasOptionsMenu(true),用于让活动知道有menu要加载

现在menu加载出来了

然后重写onOptionsItemSelected处理点击事件

现在就大功告成了吗,然而运行后会发现无论怎么点击onOptionsItemSelected都没被调用。可以再android training中找到原因
http://developer.android.com/guide/topics/ui/actionbar.html

也就是说在虽然在fragment中重写onOptionsItemSelected,但系统会在activity中先调用onOptionsItemSelected,而活动中默认都消耗了点击事件,fragment中因此无法处理点击。所以要先在托管碎片的活动中讲frament中处理的menu item返回false,让点击事件能穿到fragment的onOptionsItemSelected中

总结下
要在fragment添加menu需要以下步骤:

以上是关于Fragment中添加menu的主要内容,如果未能解决你的问题,请参考以下文章

Fragment中的ViewPager的Fragment添加子Fragment要放在onAttach中添加

Android 怎么将fragment 动态地添加到布局中的任意位置?

FragmentPagerAdapter动态添加fragment和删除fragment

在 Fragment 中添加 onOptionsItemSelected 调用

Fragment中添加menu

Android 在 Fragment 中添加选项卡