2

如果片段的 hasSetOptionsMenu 为 true,则每次在 OS 2.x 上首次启动时都不会显示溢出菜单。旋转装置解决了这个问题。此外,问题在 3.x 或 4.x 上不可重现。

我用的是4.1版本的ActionBarSherlock,持有Fragment的FragmentActivity有forceoverflow主题。

尝试将 hasSetOptionsMenu 设置为 false,这似乎解决了问题,但我必须为每个片段添加不同的菜单项,所以这对我来说不是一个选项。

调试应用程序,似乎应用程序中每个 hasSetOptionsMenu(true) 的菜单都无效,并且重新创建了活动和片段的 onCreateOptionsMenu。此外,一个有趣的事实是,在调试期间,应用程序启动会延迟,因为它会在不同的断点处停止,这会导致溢出菜单出现。这让我相信它可能是Android SDK 中报告的这个问题,但评论 #8 中提到的解决方法都没有对我有用。

另一个信息:按下硬件选项按钮,出现溢出菜单,所以问题似乎是没有显示溢出图标。

我还发现这个问题也是 ABS 中的一个报告错误,但它似乎已关闭,并且我拥有该库的最新版本。

有没有人遇到过这个?您知道解决方法/解决方法吗?

4

1 回答 1

0

解决这个问题!添加了“getSherlock().dispatchInvalidateOptionsMenu();” 在 onResume() 中为 FragmentActivity 强制菜单失效。这似乎解决了这个问题。我知道这是一个 hack,但没有设法找到另一个解决方案。尝试将菜单失效添加到片段(onCreateView 或 onActivityCreated),但这并没有修复它。因此,如果您遇到此问题,这是一种解决方法:

    @Override
    protected void onResume() {
        super.onResume();

        .....
        getSherlock().dispatchInvalidateOptionsMenu();
    }

谢谢马可的小费!

于 2012-10-03T09:54:15.997 回答