Android viewpager取消预加载的方法

在实际项目开发中,很多时候是不需要预加载的,但是 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() 里面的东西。我这里写的很简单,实际我项目里面的东西比较麻烦,这里贴出一个思路,有问题留言必回!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值