7

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

4

3 回答 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"));
    }
}
于 2013-04-30T12:17:42.737 回答
0

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

于 2014-02-02T22:49:32.107 回答
0

什么都没解决,给 AOSP 带来了问题:

http://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=54823

于 2013-05-09T14:55:45.520 回答