开头直接上结论!!!!!!
第一种原因:
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