片段菜单项没有正确显示在滑动,但将显示在TAB选择-没有菜单xml



我有一个5个片段的活动。我使用来自支持库的FragmentPageAdapter来实现滑动。

Fragment4需要在操作栏中添加一个额外的菜单项。我可以得到这个工作很好,只有当用户选择标签,不滑动到它。如果用户滑动到选项卡,则附加菜单项不会一直显示。

本质上,当我滑动到Fragment3,菜单项将显示(因为Fragment4的onCreateView被调用并存储到内存中),当我滑动到Fragment4(一个打算有菜单项),然后再次消失,当我滑动到Fragment5(它应该这样做)。但是,除非我将所有内容滑动回Fragment2,然后继续前进,否则它就会消失。唯一的例外是,如果我至少有2个片段并选择选项卡,那么它将正确显示Fragment4的菜单项。

另外,如果它显示了Fragment3的菜单项,因为它在执行时调用了onCreate,为什么当滑动到Fragment5时它就消失了?我的理解是,FragmentPageAdapter一次"加载"了3个片段,以启用平滑滑动功能。

请参阅下面的代码。

public View onCreateView(){
    ..
    setHasOptionsMenu(true);
    ..
    return view;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
    SubMenu sub = menu.addSubMenu("Options");
    sub.add(0, EMAIL, 0, "Email");
    sub.add(0, FILTER, 0, "Filter");
    sub.add(0, SAVE, 0, "Save");
    sub.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    setMenuVisibility(true);
}

如果我将setMenuVisibility(true)添加到onActivityCreated,当前一个片段进入视图时菜单将显示,因为这在技术上是当MyFragment.onActivityCreated被调用时,所以菜单显示正确的选项卡和前一个选项卡。然而,如果我滑动过去的MyFragment选项卡菜单消失,将不会重新出现时,滑动回MyFragment选项卡或任何其他选项卡。关于onCreateOptionsMenu状态的文档

"这只在第一次显示选项菜单时调用一次。要在每次显示菜单时更新菜单,请参见onPrepareOptionsMenu(菜单)。>

所以我试着添加

public void onPrepareOptionsMenu(Menu menu){
   setMenuVisibility(true);
}

,但它没有任何影响。我显然在这里遗漏了一些东西……这应该可以工作

编辑:我越研究ActionBarSherlock,就越觉得这个行为只能用那个库。它似乎不是任何版本Android的"原生"操作栏/FragmentPagerAdapter行为的一部分。有人能帮我确认一下吗?

我遇到了和你一样的问题,菜单图标在选项卡选择时显示,但在滑动时不显示。这个解决方案对我很有效:

点击参考johanols的注释

你的另一个问题对我来说很奇怪。为什么不保持所有5个片段加载?
mViewPager.setOffscreenPageLimit(5);

希望有帮助

最新更新