在ViewPager中旋转

时间:2011-08-31 00:40:47

标签: android-viewpager

我有一个带有WebViews的ViewPager片段。当我旋转手机时,ViewPager会显示第一页。这是因为活动和片段再次创建。我如何保存ViewPager的状态。以下代码不起作用

@Override
public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) 
        {
            // Restore last state for checked position.
            int pos  = savedInstanceState.getInt("currentPosition");
            this.setSelectedItem(pos);
        }
    }

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

2 个答案:

答案 0 :(得分:3)

在片段的构造函数中输入以下内容:

setRetainInstance(true);

如果你有多个构造函数,你需要确保它在默认的no-args构造函数中,然后确保每个其他构造函数调用

this();

然后在实例化PageAdapter的FragmentActivity中添加以下行:

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

标记

答案 1 :(得分:1)

关于如何创建FragmentActivity(主机活动)的全部内容。您似乎无法保存viewpager的状态,但您可以保存推送到viewpager适配器的片段状态。你也可以在片段中保存一些数据(同样的方式)。此外,如果你不希望适配器自动销毁视图(当你滑动viewpager时),覆盖适配器的destroy方法,没有超级。通过代码和简单的解决方案查看我的问题:ViewPager and fragments — what's the right way to store fragment's state?