旋转手机屏幕时ViewPager显示的问题

程序代码片段中ViewPager视图里含有WebViews。当我旋转手机时,ViewPager总显示第一个页面。这是因为活动和片段又被重新创建。如何保存ViewPager的状态不让活动和片段重新创建呢?下面的代码不能正常执行。

@Override
public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) 
        {

            int pos  = savedInstanceState.getInt("currentPosition");
            this.setSelectedItem(pos);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
        outState.putInt("currentPosition", positionOfSelectedIndex);
    }

如果改变了系统屏幕的设置方向
会触发onConfigurationChanged事件
重写,将当前状态在其内进行处理

它是关于如何创建你的FragmentActivity(主机活动)。似乎不能保存viewpager的状态,但你可以保存viewpager'适配器中fragments的状态。你也可以同样的方式保存一些内部数据片段。同样,如果你不想适配器自动摧毁视图 (当你刷新viewpager),重写适配器的摧毁方法。

在片段的构造函数中添加:

setRetainInstance(true);

如果你有很多构造函数,要确保这些是无参的构造函数,每个其它的构造函数都调用

this();

然后在 FragmentActivity中实例化 PageAdapter,加入以下代码:

myPager = (ViewPager)findViewById(R.id.pager);
myAdapter = new MyPagerAdapter(anyParamsYouMightHave);
myPager.setAdapter(myAdapter);
myPageAdpater.setCurrentItem(indexOfSomePointYouWishToReturnTo);