Android - 嵌套片段参与填充选项菜单

15
我正在实现新的嵌套片段功能,但遇到了一个问题。我的视图基本上是这样的: 一个主活动(A)包括一个片段(B),这个片段(B)包括一个分页适配器,其中有3个页面,每个页面都是一个片段(C)。
之前,在没有新的 getChildFragmentManager 的情况下是不可能实现的,但现在它完美地运行了。但是有一个问题:我希望片段 C 能够参与填充选项菜单。我尝试在每个C片段的 onActivityCreated 方法中设置 setHasOptionsMenu(true) 并重写 onCreateOptionsMenu,但什么也没发生...
如果我尝试从片段B(分页适配器的容器)中填充菜单,我可以更改菜单项...
有什么想法吗?
谢谢。
2个回答

16

是的,可以。

在 Android 4.2 或支持库版本 11 中,嵌套片段将参与填充选项菜单。像往常一样,在 onCreate() 中调用 setHasOptionsMenu(true)

但如果你使用了 ActionBarSherlock,则不会自动完成此操作,你需要手动调用父片段的 onCreateOptionsMenu() 方法,并在其中调用嵌套片段的 onCreateOptionsMenu() 方法。

更新:问题


你的意思是如果我不使用ActionBarSherlock,而是使用Android 4.0编译并使用支持库,那么我就可以在嵌套片段中使用onCreateOptionsMenu吗? - tasomaniac
@tasomaniac 是的,而且不仅限于Android 4.0版本,支持库还可以在Android 1.6及以上版本上运行。并且,正如我在答案中所写的那样,您也可以在ActionBarSherlock中使用onCreateOptionsMenu()。 - k4dima
@kreker 这个问题解决了吗?或者有其他的解决方案吗?我遇到了同样的问题:SherlockActivity(带有导航栏)----> SherlockFragmentTabstrip(带有pagerAdapter)--> SherlockFragment(子片段,我无法调用Option-menu)。 - LOG_TAG
@kreker 谢谢!你能解释一下如何从父片段手动调用子片段的onCreateOptionsMenu()吗?像这样?在父片段中使用getChildFragmentManager().onCreateOptionsMenu()?它不起作用!看起来我需要从ABS迁移到ABC? - LOG_TAG
@LOG_TAG 好吧,以某种方式在代码中找到它们... 我没有使用ABC。 - k4dima
显示剩余4条评论

11

从我的源代码阅读来看,FragmentManagerActivity的实现仅适用于根FragmentManager,以添加到选项菜单/操作栏,而不是任何子级FragmentManager实例。

假定Fragment B需要代表ViewPager的内容管理选项菜单/操作栏,并根据在pager中显示和隐藏的页面更改选项菜单/操作栏中的内容。


嗨,CommonsWare,谢谢您的快速回复,这就是我最终所做的,但我希望有一个更封装的解决方案。 - senior
是的..!! 我也卡在了这个问题上.. 然后我做了马克·墨菲告诉我的事情.. 谢谢马克。 - Sandeep Dhull
请问你的解决方法如何运作?我尝试了所有的方法,但仍然出现问题。 - Zyoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接