7

我无法onPrepareOptionsMenu()正常工作。无论我尝试什么,我都无法调用它。

我的应用程序的架构如下:我的主 Activity 包含一个 Fragment,其中包含一个 ViewPager,而 ViewPager 又具有四个子 Fragment 实例。目前,我(成功地)使用 填充 Activity 中的初始选项菜单onCreateOptionsMenu(),但我希望添加一些与每个活动子片段相对应的额外选项。

在我的孩子 Fragments 中,我确保setHasOptionsMenu(true)正在调用onCreate()并且getSherlockActivity().supportInvalidateOptionsMenu()调用 in onActivityCreated()。在主 Activity 中,onCreateOptionsMenu()在子 Fragment 实例化后调用一次,无论它们是否包含supportInvalidateOptionsMenu()。每当寻呼机中的片段被替换时,它就会被再次调用。

我尝试将onPrepareOptionsMenu()代码向上移动到父片段和主 Activity - 无济于事,这表明问题与我使用嵌套片段无关。我还尝试将onCreateOptionsMenu()方法从主 Activity 向下移动到两个片段,在那里它没有被调用。

如果有人知道这里发生了什么,我将非常感激,因为我已经坚持了两天了。

更新 - 我已经弄清楚了现在的问题,只是我仍然不确定如何解决它。我正在 4.2 上进行测试,它似乎在 ActivityonCreateOptionsMenu()之后被调用onResume()- 如在 JB 4.2 onResume 之后调用的 onCreateOptionsMenu中所见。我认为这意味着片段无法调用onPrepareOptionsMenu(),因为菜单在它们被实例化之前甚至不存在。那么我该如何解决呢?

4

1 回答 1

4

在查看 github 上的问题页面时,我忽略了 ActionBarSherlock 的一个问题,这在某种程度上是不可避免的。基本上,尚未添加嵌套片段中的选项菜单功能,请参阅:https ://github.com/JakeWharton/ActionBarSherlock/issues/828 。我现在的解决方案是将 Watson.java 替换为评论中修改过的文件之一。

于 2013-06-21T14:11:20.677 回答