2014-12-22 60 views
1

我正在實施ViewPager,其標籤類似於Google提供的實施here帶View標籤的Android ViewPager保存狀態

我的應用程序有以下行爲。我的ViewPager有3個「頁面」(fragA,fragB,fragC),我在ViewPager的頂部實施了3個標籤頁。谷歌的實施和我的區別在於,這些標籤不用於在fragments之間導航。 作爲示例,按下我的一個選項卡,在可見片段上加載一組不同的數據。我可以有fragAtab3選擇,fragBtab2選擇和fragCtab1選定。

當我在片段之間滑動時,我想保持狀態,即當前選中的選項卡。 我這個代碼achiving這樣的:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser && mTabHost != null) { 
     if (mTabHost.getCurrentTab() != selectedTimePeriod) { 
      mTabHost.setCurrentTab(selectedTimePeriod); 
     } 
    } 
} 

我在3個片段上面的代碼,這是工作的幾乎每一次的預期,但不幸的是在某些情況下,我不能因爲即使精確地再現它隨機發生,狀態不被維護。

什麼是正確的方式來保存我的標籤狀態(例如屏幕旋轉之間)Viewpager刷卡之間?

+0

你有沒有試過ViewPager的setOnPageChangeListener – Karioki

回答

3

您可以使用

viepagerObj.setOffscreenPageLimit(2) 

這將加載片段,並保持它在內存中。例如,在您啓動的時候,除了第一個(fragC)之外,接下來的兩個片段(fragB和fragA)將被加載並保存在內存中。默認情況下,該值爲1,意味着片段C +下一個片段(fragB)已加載,並且向右滑動時,fragA將加載刪除fragC,反之亦然。

+0

你好。不幸的是,這並沒有解決我的問題。旋轉屏幕時,我不能保持選擇正確的選項卡 – Favolas

+0

你試過setRetainInstance(true);裏面的片段保留狀態,而方向變化 –

+0

另外,如果你不想在方向變化期間加載UI,你可以使用android:configChanges =「orientation | keyboardHidden」作爲清單文件中的活動 –