2011-08-31 55 views
2

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

回答

1

这是所有关于你如何创建FragmentActivity(主机活动)。看起来你不能保存viewpager的状态,但你可以保存你推送到viewpager的适配器的片段的状态。你也可以将一些数据保存在片段中(同样的方法)。此外,如果您不希望适配器自动销毁视图(当您滑动viewpager时),请覆盖适配器的销毁方法,但不要在那里超级。见我的问题与代码和简单的解决方案:ViewPager and fragments — what's the right way to store fragment's state?

3

在你片段的构造函数把下面:

setRetainInstance(true); 

如果你有多个构造函数,你需要确保这是在默认的无参数构造函数,然后确保对方构造函数调用

this(); 

然后在你的FragmentActivity实例化您的PageAdapter把下面几行:

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

马克