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

你可能感兴趣的:(Tablayout+viewpager+Fragment的fragment页面数据不显示)