【问题标题】:onPrepareOptionsMenu is not called未调用 onPrepareOptionsMenu
【发布时间】:2013-06-19 16:18:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: android actionbarsherlock android-viewpager android-optionsmenu


    【解决方案1】:

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

    【讨论】:

    • 在我的评论里 :)
    • 我也做了同样的事情,但它似乎只在 api 级别 17 上工作,其中引入了 childfragment 管理器。有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2011-12-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多