在实际项目开发中,很多时候是不需要预加载的,但是 viewpager.offscreenPageLimit = 0其实默认值还是1,也就是说至少需要预加载一个页面。网上很多方法,我就介绍我认为最简单的一种:通过setUserVisibleHint来判断当前界面是否可见,可见就处理网络请求这些逻辑,不可见就不请求网络这些操作,实际实现了取消预加载的实际功能。
首先介绍一个关键的方法 setUserVisibleHint,当页面可见或者不可见的时候都会调用,但是需要注意的是此方法只有在结合FragmentPagerAdapter的时候才能使用,并且setUserVisibleHint的生命周期有时候会在onCreateView之前,但是取消预加载这个功能上肯定不影响。
下面贴出关键代码:
//是否可见
private boolean isVisibleToUser;
//是否初始化完成
public boolean isInit = false;
//全局的view
private View view;
/*
* 当前页面可见时和不可见的方法
* */
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
setParam();
}
//初始化
@Nullable
@Override
public View onCreateView(@NotNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
if (view == null) {
view = View.inflate(getActivity(), R.layout.fragment_home, null);
isInit = true;
setParam();
}
return view;
}
//处理逻辑和网络请求等
private void setParam() {
if (isInit && isVisibleToUser) {
//页面的逻辑和网络请求,下面我随便贴的一点我的代码
videoPlayView = view.findViewById(R.id.video_play);
mContentView = videoPlayView.findViewById(R.id.fl_content);
checkPermission();
getMPresenter();
}
}
一共就这几个部分,思路很简单,就是只有满足初始化完成并且当前页面可见两个条件的时候可以处理页面的逻辑代码,也就是setParam() 里面的东西。我这里写的很简单,实际我项目里面的东西比较麻烦,这里贴出一个思路,有问题留言必回!