2

我有一个带有 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);
    }
4

2 回答 2

4

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

setRetainInstance(true);

如果您有多个构造函数,则需要确保 this 在默认的无参数构造函数中,然后确保每个其他构造函数调用

this();

然后在实例化 PageAdapter 的 FragmentActivity 中放入以下几行:

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

标记

于 2012-02-22T09:22:49.480 回答
1

这完全取决于您如何创建 FragmentActivity(主机活动)。似乎您无法保存 viewpager 的状态,但您可以保存推送到 viewpager 适配器的片段的状态。您也可以在片段中保存一些数据(以相同的方式)。此外,如果您不希望适配器自动销毁视图(当您滑动 viewpager 时),请覆盖适配器的destroy 方法,并且没有 super 。用代码和简单的解决方案查看我的问题:ViewPager 和片段——存储片段状态的正确方法是什么?

于 2011-10-31T13:01:03.440 回答