问题描述
Viewpager配合fragment,每个Viewpager都放一个Fragment,并且每个fragment的OptionMenu都不同,但是遇到这样一个问题,我在其中一个fragment中写一个optionmenu,但是和它挨着的fragment会显示同样的菜单,尽管我并没有在那个fragment中写optionmenu,但是它会自动出现。
参考:
http://blog.csdn.net/shichaosong/article/details/7097337
http://stackoverflow.com/questions/23338937/how-can-i-change-option-menu-in-different-fragments?rq=1
原因
OptionMenu依附于于Activity。ViewPager中的每个Fragment都要setHasOptionMenu(true)。这时程序显示某个Fragment时,会把(左右)相邻的两个Fragment的菜单都加载到Activity中。
解决方案
解决方案一:在同一个fragment中,再写一个fragment,但是在onCreateView()方法中不返回view,返回Null,然后在这个新的fragment中写optionmenu,在onCreate()中setHasOptionMenu(true),就是说这个fragment不是为了返回视图用的,是为了后台操作用的。具体步骤不详。
参考:http://blog.csdn.net/shichaosong/article/details/7097337
解决方案2:不在各个Fragment使用Toolbar(或ActionBar),而是在Fragment的Activity上统一设置Toolbar,这样Viewpager中的Fragment就共用一个Toolbar,根据切换不同的Fragment,控制相应MenuItem的显示和隐藏。缺点是所有MenuItem的控制/响应逻辑都要写在Activity里。