0

我有一個應用程序使用兩個包含片段的選項卡。我正在使用FragmentPagerAdapter來管理選項卡更改。所有工作正常與兩個選項卡。使用FragmentPagerAdapter恢復片段

我最近添加了第三個選項卡,我有點麻煩。 tab1(fragment1)是一個小片段的LinearLayout。 tab2(fragment2)是一個簡單的文本佈局。 tab3(fragment3)也是一個簡單的文本佈局。

如果我在tab1和tab2之間切換都可以正常工作並保持其狀態。但是,如果我在tab1和tab3之間切換,tab3正確顯示文本,但tab1顯示一個空白選項卡。

我知道,如果一個標籤離開當前位置超過1個位置,該片段將被銷燬,並且片段將需要被重新創建。 FragmentPagerAdapter不會自動執行此操作嗎?

我發現,如果我旋轉設備(選擇tab1),tab1片段將恢復其正確的狀態,所以片段不被破壞。好像有一個問題,版面沒有被ViewPager正確重新創建,但這只是一個猜測。

作爲解決方案,我設置了myViewPager.setOffscreenPageLimit(2),並保留了佈局。我想讓這個工作,因爲我認爲它應該不會迫使碎片留在記憶中。

回答

0

閱讀文檔的onCreateView方法添加

setRetainInstance(true); 

,讓我覺得你的做法是好的。看看這個:

如果你有一個小數目的頁(3-4),你可以保持積極的所有 一次,更少的時間將在佈局新創建的視圖花 子樹的用戶頁面來來回回。

您應該保持低限,特別是如果您的頁面有複雜的 佈局。

我很好奇,但如果setRetainInstance(真)會的工作,因爲這是誰決定不重新創建一個片段,它的得到一些Android的變化配置操作過程中重新創建適配器。

+0

我已經在tab1片段上設置了setRetainInstance(true),但我想我可能沒有將它設置在嵌入tab片段內的片段上。主要的片段確實在那裏,該選項卡的菜單項被正確創建,只是佈局不被渲染。我需要更深入地瞭解佈局檢查員。 –

+0

我已經檢查過,並且在標籤片段及其嵌套子項上都設置了「setRetainInsance」。我有該選項卡的「添加」功能,如果我使用它,新的子片段不會被創建。這似乎是與正確恢復的子碎片有關的問題。需要做更多的挖掘 –

0

在setOffScreenPageLimit()片段

相關問題