安卓ViewPager屏幕旋转问题

7
我有一个带有ActionBarSherlock选项卡和ViewPager的Activity。当滚动页面、切换选项卡时,当前页面也会改变。 我在pageview中使用扩展FragmentStatePagerAdapter类的适配器。 问题是,当设备旋转时,页适配器中的getItem未被调用,似乎片段引用不正确。 这是一个巨大的问题,因为用户必须在pager中填写一些字段。这些字段在旋转时恢复正确,但由于片段的引用不正确,我无法以正确的方式保存这些值。 对于旋转有什么想法吗?

你好,我看到了你的帖子,因为我也遇到了同样的问题。我将尝试使用标签来解决这个问题。你已经找到解决方案了吗? - Poutrathor
这个问题在这里探讨:https://dev59.com/kuo6XIcBkEYKwwoYSCc1#29288093 - piccy
3个回答

3

在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"));
    }
}

嗨,Neoh。保存当前页面没有起作用。当我旋转时,旋转后的页面仍然是相同的。问题在于,适配器中的getItem在旋转后没有被再次调用。 - davidtiagoconceicao
有一个错误。请尝试使用mViewPager.setCurrentItem(savedInstanceState.getInt("item")) - Neoh
1
嗨Neoh,这是我做的:outState.putInt(CURRENT_PAGER_ITEM,currentItem);然后在onCreate中pager.setCurrentItem(savedInstanceState.getInt(CURRENT_PAGER_ITEM));感谢您的帮助。 - davidtiagoconceicao


0
我已经在这个问题的帖子https://dev59.com/qmIk5IYBdhLWcg3wUsnv#21517213中发布了解决方案。基本上,您需要继承PagerAdapter而不是FragmentPagerAdapter,并自己处理创建和删除项目(getItem()是从FragmentPagerAdapter.instantiateItem()调用的例程,因此问题是当屏幕旋转时例程不会重新调用getItem(),因为有一些可能是性能增强代码。当您继承它时,可以通过不尝试重新连接到已删除的片段来正确处理旋转)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接