【问题标题】:Android ViewPager Screen RotationAndroid ViewPager 屏幕旋转
【发布时间】:2014-02-03 06:49:32
【问题描述】:

我有一个带有 ActionBarSherlock 选项卡和其中的 ViewPager 的 Activity。滚动页面时,切换选项卡并更改选项卡,当前页面也会更改。 我正在使用一个扩展 FragmentStatePagerAdapter 作为页面视图中的适配器的类。 问题是当设备旋转时,来自页面适配器的 getItem 没有被调用,并且看起来片段引用不正确。 这是一个大问题,因为用户必须填写寻呼机内的某些字段。这些字段在旋转时正确恢复,但由于我对片段的引用不正确,我无法以正确的方式保存这些值。 对旋转有任何想法吗?

【问题讨论】:

  • 你好,我找到你的帖子是因为我有这个确切的问题。我将尝试使用标签。你找到解决方案了吗?
  • 这个问题在这里探讨:stackoverflow.com/a/29288093/1299234

标签: android android-viewpager


【解决方案1】:

在onSavedInstanceState中保存当前页码:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("item", mViewPager.getCurrentItem());
}

然后在 onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState != null) {
         mViewPager.setCurrentItem(savedInstanceState.getInt("item"));
    }
}

【讨论】:

  • 嗨,尼奥。保存当前页面不起作用。当我旋转时,旋转后的页面是一样的。关键是在旋转之后不会再次调用来自适配器的 getItem。
  • 有一个错误。尝试改用mViewPager.setCurrentItem(savedInstanceState.getInt("item"))。
  • 嗨 Neoh,这就是我所做的:outState.putInt(CURRENT_PAGER_ITEM, currentItem);然后 pager.setCurrentItem(savedInstanceState.getInt(CURRENT_PAGER_ITEM));在 onCreate 上。感谢您的帮助。
【解决方案2】:
【解决方案3】:

我已在https://stackoverflow.com/a/21517213/3170538 的问题中发布了此问题的解决方案。本质上,您希望继承 PagerAdapter,而不是 FragmentPagerAdapter,并自己处理项目的创建和删除(getItem() 是从 FragmentPagerAdapter.instantiateItem() 调用的例程,所以问题是当屏幕旋转时例程没有t 重新调用 getItem(),因为可能是一些性能增强代码。当您将其子类化时,您可以通过不尝试重新连接到已删除的片段来正确处理旋转)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多