在片段之间滑动时消失的操作栏按钮

时间:2012-12-21 23:24:24

标签: android android-fragments actionbarsherlock android-viewpager

我在操作栏中有一个带有多个标签的应用,每个标签都有一组不同的选项菜单图标显示在操作栏中。有些标签有两个图标,有些没有。

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

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

我试过在调试器中分析问题。我确定FragmentPagerAdapter正在为新选择的片段正确调用setMenuVisibility(true),并使用setMenuVisibility(false)调用其他片段。

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

通过使用一个图标滑动到屏幕然后返回到带有两个图标的屏幕,消失似乎更加严重。

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

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

我的手机正在运行Android 2.3.5。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

请关注此link

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

将调用推迟到onCreate

中的viewPager.setCurrentItem
public void onCreate(...) {
    ...
    view.post(new Runnable() {
        public void run() {
            // guarded viewPager.setCurrentItem
        }
    }
}