片段菜单项在滑动时无法正确显示,但会在选项卡上显示 - 没有菜单xml

时间:2013-03-06 16:49:26

标签: android menu android-fragments actionbarsherlock

我有一个包含5个片段的活动。我正在使用支持库中的FragmentPageAdapter来实现滑动。

Fragment4需要在操作栏中添加一个额外的菜单项。只有当用户选择选项卡并且不滑动它时,我才能正常工作。如果用户滑动到选项卡,则附加菜单项不会一直显示。

基本上,当我滑动到Fragment3时,菜单项将显示(因为Fragment4的onCreateView被调用并存储到内存中),当我滑动到Fragment4(想要有菜单项的那个)时它会停留,然后当它再次消失时我刷到Fragment5(应该这样做)。然而,除非我将所有背面滑动到Fragment2然后继续前进,否则它会一直消失。唯一的例外是,如果我至少有两个片段并选择选项卡,那么它将正确显示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行为的一部分。任何人都可以为我确认一下吗?

1 个答案:

答案 0 :(得分:2)

我遇到了与您相同的问题,菜单图标确实显示在选项卡上,但没有显示在滑动上。这个解决方案对我有用:

Click 见johanols评论。

你的另一个问题对我来说很奇怪。为什么不加载所有5个片段?

mViewPager.setOffscreenPageLimit(5);

希望有所帮助:)

相关问题