2016-02-22 97 views
-1

我有一個片段A(說),其中包含一個FragmentPagerAdaptor,其中進一步包含碎片(有列表視圖)。當我點擊一個列表項時,我用另一個片段(比如說B)替換了完整的片段A,我也在後面的堆棧中添加了片段A的事務;現在,當我按下B後退按鈕時,A的子片段中的列表被重新創建並滾動到頂部。我想保留列表的狀態(滾動),我試圖存儲列表的scrollY並重新設置,但它不準確,列表需要一些時間來初始化,也需要時間來滾動(自該列表可以有數千個項目)。嵌套片段不保留其狀態

我碰到這個鏈接來解決這個問題:

http://ideaventure.blogspot.in/2014/10/nested-retained-fragment-lost-state.html

但在孩子片段設置setRetainInstance(真正的)崩潰的應用程序說:

java.lang.IllegalStateException:能否」噸保持嵌套在其它片段

它也是在谷歌論壇一個已知的錯誤fragements:

https://code.google.com/p/android/issues/detail?id=74222

任何形式的幫助將不勝感激!

+0

不會替換片段A簡單地添加片段B和隱藏片段A並將您的事務添加到後退堆棧以進行自動處理反之亦然。 –

回答

1

我想保留列表的狀態(滾動),我試着存儲列表的scrollY並重新設置,但它不準確,列表需要一些時間來初始化,也需要時間來滾動(因爲列表可以有數千個項目)。

這是recomended aproach,保留片段被設計爲維護數據而不是UI元素,嵌套片段也有一些限制。有關於如何保持列表滾動位置的SO,即:Maintain/Save/Restore scroll position when returning to a ListView。所以你應該能夠找到一個可行的解決方案。

如果你的列表有一些繁重的數據結構,你可以把它放在沒有UI的非嵌套保留片段中。這個片段不會在配置更改(如屏幕旋轉)期間被破壞,但是當您關閉應用並且Android決定終止您的進程時,它仍然會被破壞。因此,如果您忘記了這種情況,可能會導致崩潰,您必須爲其準備應用程序。

其他選項是將你的列表數據存儲在sqlite數據庫中,它可以免除配置更改,但可能更新sqlite可能會很慢。