防止ViewPager中的Fragment被銷燬的方法

陳明明發表於2017-12-14

在使用ViewPager與Fragment的時候,ViewPager會自動快取1頁內的資料,如下圖:


當我們當前處在頁面2的時候,頁面1和頁面3的View實際上已經建立好了,所以在我們拖動的時候是可以看見他們的介面的。

但是當我們的頁面處在1的時候,頁面3實際上就已經銷燬了。直到跳轉到頁面2的時候,頁面3才會建立View。


這時,如果頁面3中有需要耗時的事件,比如網路訪問。那麼,在我們進行 1-->2 的操作的時候,就會不斷的出現頁面3載入的對話方塊(如果有的話)。而且如果快速的 1-->2-->3的切換,3中的內容很可能還沒載入出來。

這樣重複的載入,既影響體驗、又耗費時間和流量,所以筆者這兩天一直在查如何在Fragment移出的時候不要銷燬,或者儲存狀態。

後來發現真是多此一舉,如果您的軟體對記憶體消耗不是很在意的話,只需加入以下程式碼:

  1. pager.setOffscreenPageLimit(2);

就可以讓ViewPager多快取一個頁面,這樣上面的問題就得到了解決。


當然這只是個取巧的方法,如果有比較好的儲存狀態的方法會更好。

轉載請註明來自:blog.csdn.net/icyfox_bupt…


相關文章