天天看點

Tablayout+viewpager+Fragment的fragment頁面資料不顯示

  開發中經常使用Tablayout+ViewPager與Frament 關聯,之前fragment 頁面建立比較少,沒有出現什麼問題,但是當建立frament頁面頁面比較多的時候,fragment 頁面的資料會有不顯示,想了各種辦法沒有解決,網上中找到解決辦法。寫個問個記錄,也供大家參考。

    将ViewPager的擴充卡給為FragmentStatePagerAdapter 是配置器,之前使用的FragmentPagerAdaper 擴充卡。原因是因為在FragmentPagerAdapter中建立完fragment就不會銷毀了,是以會導緻再次進入就不會重新建立,當然更不會加載網絡資料了。

  FragmentPagerAdaper 與FragmentStatePagerAdapter 的差別:

                 FragmentPagerAdapter: FragmentPagerAdapter不是将不可見的fragment銷毀,而是僅僅将該fragment從頁面中detach掉,fragment還是在manager中儲存,記憶體沒有被釋放,從這邊可以看到FragmentPagerAdapter不适合fragment數量多的情況下使用,因為未被釋放的fragment會占用大量記憶體。

                 FragmentStatePagerAdapter:當fragment在頁面中不可見時,該fragment的狀态會先被儲存到mSavedState中,而fragment執行個體則會被銷毀,在對應的instantiateItem方法中,fragment會被重新建立,并将mSavedState中對應狀态賦予該剛剛建立的新fragment,進而達到恢複之前fragment和節省記憶體的效果,是以FragmentStatePagerAdapter适合有較多fragment情況。

                如果出現報錯:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference 

 解決方案:嘗試在擴充卡中重寫此方法:

@Override
public void restoreState(Parcelable state, ClassLoader loader) {
   
}      

     注意方法中 super.restoreState(state, loader); 要删除或登出

   參考文章:https://blog.csdn.net/qq_35986042/article/details/78784183

                    https://blog.csdn.net/a527891474/article/details/54099649