2011-08-31 89 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); 

馬克