無意間發現viewPager中綁定三個Fragment后,在初始化最后一個Fragment時,發現控件初始化時為null的情況,
排查了控件id重復及layout文件名稱無沖突情況后,發現依舊無效。
然后換一個思路,排查fragment生命周期。
在使用ViewPager與Fragment的時候,ViewPager會自動緩存1頁內的數據,
當我們當前處在頁面2的時候,頁面1和頁面3的View實際上已經創建好了,所以在我們拖動的時候是可以看見他們的界面的。
但是當我們的頁面處在1的時候,頁面3實際上就已經銷毀了。直到跳轉到頁面2的時候,頁面3才會創建View。
這時,如果頁面3中有需要耗時的事件,比如網絡訪問。那么,在我們進行 1-->2 的操作的時候,就會不斷的出現頁面3加載的對話框(如果有的話)。
而且如果快速的 1-->2-->3的切換,3中的內容很可能還沒加載出來。
這樣重復的加載,既影響體驗、又耗費時間和流量,在Fragment移出的時候不要銷毀,或者保存狀態。
經過努力嘗試后,發現解決方案:
pager.setOffscreenPageLimit(2);
就可以讓ViewPager多緩存一個頁面,這樣上面的問題就得到了解決。
By:yzl