在使用ViewPager與Fragment的時候,ViewPager會自動緩存1頁內的數據,
當我們當前處在頁面2的時候,頁面1和頁面3的View實際上已經創建好了,所以在我們拖動的時候是可以看見他們的界面的。
但是當我們的頁面處在1的時候,頁面3實際上就已經銷毀了。直到跳轉到頁面2的時候,頁面3才會創建View。
這時,如果頁面3中有需要耗時的事件,比如網絡訪問。那么,在我們進行 1-->2 的操作的時候,就會不斷的出現頁面3加載的對話框(如果有的話)。而且如果快速的 1-->2-->3的切換,3中的內容很可能還沒加載出來。
這樣重復的加載,既影響體驗、又耗費時間和流量,所以筆者這兩天一直在查如何在Fragment移出的時候不要銷毀,或者保存狀態。
后來發現真是多此一舉,如果您的軟件對內存消耗不是很在意的話,只需加入以下代碼:
mViewPager.setOffscreenPageLimit(2);
就可以讓ViewPager多緩存一個頁面,這樣上面的問題就得到了解決。
ViewPager里面定義了一個
private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES;默認值 是1,這表示你的預告加載的頁面數量是1,假設當前有四個Fragment的tab,顯示一個,預先加載下一個.這樣你在移動前就已經加載了下一個界面,移動時就可以看到已經加載的界面了.
- 可以通過修改這個值,但有,修改后就會有一個麻煩的地方,因為移動時不會預先加載下一個界面的關系,所以會看到一片黑色的背景.
- 如果不介意黑色背景,可以覆蓋這個類,然后定義默認的加載數量為0
- private int mOffscreenPageLimit = DEFAULT_OFFSCREEN_PAGES=0;就是不預先加載下一個界面.
- 如果想預加載,可以使用原來的ViewPager,或這里直接改為mOffscreenPageLimit=你要加載的數量。
LazyViewPager沒有預加載