使用ViewPager + FragmentStatePagerAdapter 切换后页面数据加载空白或者丢失

开头直接上结论!!!!!!

第一种原因:

onCreateView中没有做view持久化

viewpage切换的时候Fragment的生命周期会重新走一遍,从头走到尾那种~如果你没有做持久化第一次加载的view等于你上次获取的数据永远都是丢失的。

//关键点一:持久化,初始化只能做一次
if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragemnt_have_look, container, false);

            initView(rootView);
            listener();
//            if (type.equals(LOOK_TYPE_VIDEO)) initVideoView();
            initVideoView();
}

第二种原因:

数据初始化做了多次

因为fragment的生命周期会重新加载多次。当接口内有page这种操作。如:第一次加载第一页有数据。切换到别的页面再切回来走到生命周期会重新网络请求,(此时的page已经等于2了,因为在第一次获取成功之后++了)再去获取第二页时,服务器刚刚好没有数据并且也没有做持久化view的操作就会导致空白的现象。

  //第一页的时候才去拿数据
        if (currentPage == 1) {
            getData(currentPage);
        }

 

使用ViewPager + FragmentStatePagerAdapter 切换后页面数据加载空白或者丢失_第1张图片

附上切换fragment时的生命周期供大家参考

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

androidx中FragmentStatePagerAdapter   建议使用两个参数的构造方法

第二个需要传入的值,写写我的理解

这个是只加载当前显示的fragment---------

FragmentStatePagerAdapter     BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT  

这个会加载显示fragment的左右两个-系统内默认是这种方式--------如显示的是1  会加载0和2.   0 :1:2 从下面的log可以看出

BEHAVIOR_SET_USER_VISIBLE_HINT

使用ViewPager + FragmentStatePagerAdapter 切换后页面数据加载空白或者丢失_第2张图片

你可能感兴趣的:(android)