一个支持下拉自动加载的recycleview

原创 2015年11月19日 22:36:41
public class RecyclerViewOnScroll extends RecyclerView.OnScrollListener {
    RecyclerView.Adapter mMyadputer;
    LodeMoreCallBack mLodeMoreCallBack;
    int lastVisibleItem = 0;
    int firstVisibleItem = 0;


    public RecyclerViewOnScroll(RecyclerView.Adapter mMyadputer, LodeMoreCallBack mLodeMoreCallBack) {
        this.mMyadputer = mMyadputer;
        this.mLodeMoreCallBack = mLodeMoreCallBack;
    }


    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
        int totalItemCount = layoutManager.getItemCount();
        if (layoutManager instanceof LinearLayoutManager) {
            LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) layoutManager);
            lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
            firstVisibleItem = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
        } else if (layoutManager instanceof GridLayoutManager) {
            GridLayoutManager gridLayoutManager = ((GridLayoutManager) layoutManager);
            //通过LayoutManager找到当前显示的最后的item的position
            lastVisibleItem = gridLayoutManager.findLastVisibleItemPosition();
            firstVisibleItem = gridLayoutManager.findFirstCompletelyVisibleItemPosition();
        } else if (layoutManager instanceof StaggeredGridLayoutManager) {
            StaggeredGridLayoutManager staggeredGridLayoutManager = ((StaggeredGridLayoutManager) layoutManager);
            //因为StaggeredGridLayoutManager的特殊性可能导致最后显示的item存在多个,所以这里取到的是一个数组
            //得到这个数组后再取到数组中position值最大的那个就是最后显示的position值了
            int[] lastPositions = new int[((StaggeredGridLayoutManager) layoutManager).getSpanCount()];
            staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions);
            lastVisibleItem = findMax(lastPositions);
            firstVisibleItem = staggeredGridLayoutManager.findFirstVisibleItemPositions(lastPositions)[0];
        }


    }


    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        //获取总的适配器的数量
        int totalCount = mMyadputer.getItemCount();
        Log.e("总的数目", totalCount + "");
        Log.e("滚动的状态", newState + "");
        //这个就是判断当前滑动停止了,并且获取当前屏幕最后一个可见的条目是第几个,当前屏幕数据已经显示完毕的时候就去加载数据
        if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == mMyadputer.getItemCount()) {
            //回调加载更多
            mLodeMoreCallBack.LodeMore();
        }
    }
    //找到数组中的最大值


    private int findMax(int[] lastPositions) {


        int max = lastPositions[0];
        for (int value : lastPositions) {
            //       int max    = Math.max(lastPositions,value);
            if (value > max) {
                max = value;
            }
        }
        return max;
    }
}

RecyclerView实现下拉刷新与自动加载控件封装

前端时间自己整合了一个listview实现的下拉刷新上拉自动加载的demo,有需要的看这里listview实现下拉刷新上拉自动加载,由于新版本APP采用到RecyclerView,发现找不到一个好的简...
  • u012402940
  • u012402940
  • 2017年02月16日 16:18
  • 1611

RecyclerView的下拉刷新和自动加载更多

RecyclerView是android v7包下的一个新的控件,用来显示列表型的数据。在Recyclerview之前,我们现实纵向的列表数据时一般都是使用ListView,而用GridView来显示...
  • spareyaya
  • spareyaya
  • 2015年11月04日 20:20
  • 2500

android 打造真正的下拉刷新上拉加载recyclerview(四):自动加载和其他封装

WZMRecyclerView的最后一篇,简单介绍了自动加载、EmptyView的实现、对Adapter进行封装和分割线相关。...
  • anyfive
  • anyfive
  • 2016年11月09日 13:32
  • 2078

JS网页下拉实现自动加载的简单实例

/** 自动加载更多 **/ (window).scroll(function(){  loadData();  });  function loadData(){  totalheight=p...
  • cjm1103
  • cjm1103
  • 2015年10月10日 10:23
  • 1331

RecyclerView下拉刷新和加载更多

之前一直写的是ListVIew下拉刷新,但是好多朋友都说要RecycleView的下拉刷新和滑动加载,其实,这个原理都是差不多。抽空,我就写了下RecycleView的下拉刷新和滑动加载更多。 因此...
  • meijian531161724
  • meijian531161724
  • 2016年03月14日 16:36
  • 3689

recycleview上拉自动加载数据

上拉加载自动加载数据,其实是一个分页的表现,也就是说,我们上拉的时候时需要自动取请求数据,但是在什么时候取请求呢? 我们应该滑动到最底下面的时候加载数据。这个时候我们最重要的就是判断什么时候到达了最...
  • u013915524
  • u013915524
  • 2016年09月26日 16:10
  • 698

Android RecyclerView 自动加载更多

老规矩,先上效果图。1 判断到达底部首先思考下自动加载更多这个需求,可以知道就是滑动到底部的时候同时加载更多的数据。那么首先需要做的就是判断是否滑动到了底部。RecyclerView 有个方法onSc...
  • u014537423
  • u014537423
  • 2016年09月16日 15:40
  • 4708

Android开发之RecyclerView的上拉刷新和下拉加载

Android开发之RecyclerView的上拉刷新和下拉加载 自2015年谷歌开发者大会的召开后,给我们推出了一个新的控件即RecyclerView,它将逐步取代ListView和GriView...
  • FlyingSnow2211
  • FlyingSnow2211
  • 2015年09月17日 10:21
  • 1248

RecycleView三种表现形式的上拉加载和下拉刷新

RecycleView可以表现成三种: 1、ListView 2、瀑布流 3、GridView 其实这三种控件现在都有各自的类以及对应的上拉和下拉,但是RecycleView出来后,一个控件就能...
  • Picasso_L
  • Picasso_L
  • 2015年10月20日 13:04
  • 6236

RecyclerView 下拉刷新和上拉加载

RecyclerView 下拉刷新和上拉加载RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很有必要的事情。在...
  • lisdye2
  • lisdye2
  • 2016年05月12日 14:59
  • 11490
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个支持下拉自动加载的recycleview
举报原因:
原因补充:

(最多只允许输入30个字)