2 yongyong 21 yongyong_21 于 2012.10.19 17:17 提问

旋转手机屏幕时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);
    }

3个回答

franzhong
franzhong   2012.10.22 11:19
已采纳

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

yongyong_21
yongyong_21 哦,明白了。呵呵,谢谢!
大约 5 年之前 回复
curie_87
curie_87   2012.10.22 10:29

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

xiaoyan_12
xiaoyan_12   2012.10.22 11:13

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

setRetainInstance(true);

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

this();

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

myPager = (ViewPager)findViewById(R.id.pager);
myAdapter = new MyPagerAdapter(anyParamsYouMightHave);
myPager.setAdapter(myAdapter);
myPageAdpater.setCurrentItem(indexOfSomePointYouWishToReturnTo);
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!