RecyclerView滑动监听,判断是否滑动到了最后一个item

image.png

前言

RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好。接下来通过一系列的文章讲解如何使用RecyclerView,彻底抛弃ListView.


介绍

RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理:

  • 使用LayoutManager来确定每一个item的排列方式。
  • 为增加和删除项目提供默认的动画效果。

你也可以定义你自己的LayoutManager和添加删除动画,RecyclerView项目结构如下:


RecyclerView项目结构
  • Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个item的界面进行绑定。
  • LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。回收或重用一个View的时候,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。

目前SDK中提供了三种自带的LayoutManager:

  • LinearLayoutManager

  • GridLayoutManager

  • StaggeredGridLayoutManager

以上是RecyclerView一些简单的介绍,这篇文章出要讲我在使用过程中遇到的一个问题:RecyclerView滑动监听,判断是否滑动到了最后一个item?

代码如下

recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {  
        //用来标记是否正在向最后一个滑动  
        boolean isSlidingToLast = false;  

        @Override  
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {  
            super.onScrollStateChanged(recyclerView, newState);  
            LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();  
            // 当不滚动时  
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {  
                //获取最后一个完全显示的ItemPosition  
                int lastVisibleItem = manager.findLastCompletelyVisibleItemPosition();  
                int totalItemCount = manager.getItemCount();  

                // 判断是否滚动到底部,并且是向右滚动  
                if (lastVisibleItem == (totalItemCount - 1) && isSlidingToLast) {  
                    //加载更多功能的代码  
                }  
            }  
        }  

        @Override  
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {  
            super.onScrolled(recyclerView, dx, dy);  
            //dx用来判断横向滑动方向,dy用来判断纵向滑动方向  
            if (dx > 0) {  
                //大于0表示正在向右滚动  
                isSlidingToLast = true;  
            } else {  
                //小于等于0表示停止或向左滚动  
                isSlidingToLast = false;  
            }  
        }  
    });

总结:

以上代码就可以实现RecyclerView滑动监听,是否到了最后一个item,这在项目是很常见的,希望可以解决遇到的问题。同时如果有更好的方法也可以留言与君共勉!

你可能感兴趣的:(RecyclerView滑动监听,判断是否滑动到了最后一个item)