使用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);
        }

 

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

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

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

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

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

FragmentStatePagerAdapter     BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT  

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

BEHAVIOR_SET_USER_VISIBLE_HINT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值