【问题标题】:Disappearing action bar buttons when swiping between fragments在片段之间滑动时消失的操作栏按钮
【发布时间】:2012-12-21 23:24:24
【问题描述】:

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

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

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

我已尝试在调试器中分析问题。我确定 FragmentPagerAdapter 正确调用了新选择的 Fragment 的 setMenuVisibility(true),而其他 Fragment 使用 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。

【问题讨论】:

  • FWIW,ActionBarSherlock 最高为 4.2.0,但我不知道这是否有帮助。如果没有人回答,请尝试创建一个重现错误的示例项目——如果你能做到,我会看看它。
  • 谢谢,下周我可能会试一试。
  • 仅供参考,升级到 ABS 4.2.0 并没有解决问题。为了进一步描述这个问题,ViewPager 中的每个片段都有一个不同的选项菜单 XML 文件,它在 onCreateOptionsMenu() 中扩展。包含的 SherlockFragmentActivity 也有一个菜单,它在 onCreateOptionsMenu() 中膨胀。我尝试注释掉活动的菜单膨胀以查看它是否会干扰,但它不会。与问题中报告的行为相同。我将制作一个示例项目来演示该错误。
  • 我尝试创建一个单独的示例项目,但无法重现该问题。这有点让人抓狂!
  • 无论出于何种原因,当我启动应用程序并滑动到最右侧的选项卡时,该应用程序当前不断丢失一个按钮。失去一个按钮,我的意思是主 Activity 中的一个按钮仍然可见,并且该按钮的右侧是 Fragment 按钮应该所在的孔。有趣的是,一旦进入这种状态,ActionBar 就会以这种方式冻结。我左右滑动(或单击选项卡),ActionBar 不断有 Activity 的按钮和右侧的孔,即使当前的 Fragment 应该添加两个按钮。

标签: android android-fragments actionbarsherlock android-viewpager


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    只要关注这个link

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多