RecycviewView加载更多和预加载

一、Recycleview的上拉加载更多

    mRecyclerview.addOnScrollListener(mOnScrollListener);

    RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
            int itemCount = layoutManager.getItemCount();
            int lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
            if (lastPosition == itemCount - 1 && isLoadMore) {
               //加载更多
               loadMore();
            }
        }
    };

二、Recycleview的预加载

一些时候在网络不流畅的情况下上拉加载比较缓慢,体验不太好,这时候就需要用到预加载了,比如说上拉加载每次加载20条数据,那么在用户滑到第15条的时候加载预加载下一条数据,这样用户滑到第20条时候数据已经显示出来了,不需要再次加载了,等于说提前了,这样体验更流畅。

在那块监听Recycleview的滑动显示的最后一条的item的位置信息呢?在上面的Recycleview上拉加载更多中mOnScrollListener的onScrolled能不能监听到呢?实际上是监听不到了的。在使用 layoutManager.findLastVisibleItemPosition()获取位置信息在和所需要加载时候的位置信息比较的时候,如果我们滑动的手速特别靠着惯性滑动,那么onScrolled不会执行,findLastVisibleItemPosition自然不会获取到数据,就会有遗漏,所有这个方法是行不通的。我们知道在Recycleview的onBindViewHolder方法中每次都会绑定数据,如果每次获取一次加载的位置和预加载的位置比较就会获得预加载条件,这样每次就能够预加载下一条数据,并且不会遗漏。

    private boolean isScrolled = false;

    @Override
    public void onBindViewHolder(MyRecyclerHolder holder, int position) {
        super.onBindViewHolder(holder, position);
        if (isScrolled ) {
            return;
        }
        //20表示每页加载20项数据,15表示从第六页开始加载
        if (position  % 20 == 15) {
            //请求接口提前加载
            request()
        }
        //onBindViewHolder会被执行多次,只有上滑时候在请求下一页,上滑就不执行预加载了
        isScrolled = true;
    }

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值