1

我有一个包含 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(Menu)。” >

所以我尝试添加

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

但它根本没有效果。我显然在这里遗漏了一些东西......这应该可以

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

4

1 回答 1

2

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

点击 查看 johanols 评论。

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

mViewPager.setOffscreenPageLimit(5);

希望能帮助到你 :)

于 2013-04-30T17:18:27.210 回答