9

我有一个在操作栏中包含多个选项卡的应用程序,每个选项卡都有一组不同的选项菜单图标显示在操作栏中。有些选项卡有两个图标,有些则没有。

问题是当我在屏幕之间滑动时,各个屏幕的按钮可能会显示,也可能不会显示。即在应该有两个图标的屏幕上,操作栏中将没有图标!

但是,当我单击选项卡时,屏幕始终会显示正确的图标。

我尝试在调试器中分析问题。我确定FragmentPagerAdapter正确调用setMenuVisibility(true)了新选择的 Fragment,其他 Fragment 使用setMenuVisibility(false).

我找不到按钮出现/消失的确切模式。我可以在两个屏幕之间左右滑动,每个屏幕都有两个不同的按钮。该问题将在 1 到 20 次滑动后出现在任何地方。

滑动到带有一个图标的屏幕然后回到带有两个图标的屏幕似乎会加剧消失。

我曾尝试将调用添加到其中,Activity.invalidateOptionsMenu()但似乎没有任何影响。例如,我将此调用添加到 TabAdapter 的 onPageScrollStateChanged() 中,该调用在滑动动画完成后调用。我也尝试将其添加到 Fragments 的 onResume() 或 TabAdapter.onTabSelected() 完成后,但无济于事。

我正在使用 ActionBarSherlock 4.1.0(由于不同的问题,我已替换为最新的 android-support-v4.jar)。我的 Activity 扩展SherlockFragmentActivity并简单地实例化了一个ViewPager. 我已经覆盖了FragmentPagerAdapterViewPager 的适配器(遵循 ViewPager Android 文档上的标准示例)。

我的手机运行的是 Android 2.3.5。

4

2 回答 2

6

ViewPager / ActionBar, Menu Items not displayed中提供了针对此问题的几种解决方法。第 8 项中讨论的修复对我有用。

于 2013-02-04T15:11:06.520 回答
1

只需点击此链接

if (viewPager.getCurrentItem() != position)
  viewPager.setCurrentItem(position);

在 onCreate 中推迟对 viewPager.setCurrentItem 的调用

public void onCreate(...) {
    ...
    view.post(new Runnable() {
        public void run() {
            // guarded viewPager.setCurrentItem
        }
    }
}
于 2014-10-13T14:49:02.133 回答