代码之家  ›  专栏  ›  技术社区  ›  severine

片段菜单项在滑动时未正确显示,但将显示在选项卡select-no menu xml上

  •  1
  • severine  · 技术社区  · 13 年前

    我有一个有5个片段的活动。我正在使用 FragmentPageAdapter 从支持库中选择,以实现滑动。

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

    从本质上讲,当我滑动到Fragment3时,菜单项将显示(因为Fragment4的onCreateView被调用并存储在内存中),当我滚动到Fragment4时(该菜单项旨在拥有该菜单项),它会停留,然后当我滑动至Fragment5时再次消失(它应该这样做)。然而,除非我把所有的东西都向后滑动到碎片2,然后继续前进,否则它会一直消失。唯一的例外是,如果我至少离开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选项卡,则菜单将消失,并且在向后滑动MyFraction选项卡或任何其他选项卡时不会重新出现 onCreateOptionsMenu

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

    所以我试着添加

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

    但它根本没有效果。我显然错过了什么。。。这应该有效

    编辑: 好吧,所以我对ActionBarSherlock研究得越多,这种行为似乎就越只能使用该库。它似乎不是“本机”操作栏的一部分/ FragmentPagerAdapter 任何版本的Android的行为。有人能帮我确认一下吗?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Tinus81    13 年前

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

    Click 请参阅johanols的评论。

    你的另一个问题我觉得很奇怪。为什么不把所有5个碎片都装上呢?

    mViewPager.setOffscreenPageLimit(5);
    

    希望有帮助:)