监听RecyclerView滑动事件

监听RecyclerView的滑动事件,一开始我总会选择使用ScrollView嵌套RecyclerView的方式,因为ScrollView有自带的监听滑动方法。

 

但是也有缺点,上拉加载更多数据是无效的。 如果使用了ScrollView嵌套RecyclerView,那么一进入页面,RecyclerView的所有数据都会显示出来,这在数据很多的时候,会出现内存溢出,所以谷歌官方也是不推荐使用的。

 

如果是一个页面除了RecyclerView顶上还有别的元素那就给RecyclerView加头布局,底部如果还有元素,就加脚布局。

总之放弃拿ScrollView嵌套RecyclerView

 

加头布局简单,但是只用一个RecyclerView想监听滑动事件就比较麻烦了,需要多做一些操作:

 

RecyclerView有自带的监听滑动方法

addOnScrollListener 
      mRecyclerView.addOnScrollListener(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);

                }

            }
        });

onScrolled方法里回调了一个dy参数,就是Y轴数值

但是这个方法记录的Y轴是单次的。  也就是说,滑动完成之后,dy会重新变成0

 

这时候我们想要的是 总共滑动的距离,所以我们可以这样:

int scrollY += dy;

把Y轴滑动的距离存储起来相加,这时候的这个scrollY就是总共滑动的Y值了

 

值得一提的是:最好把scrollY的值保存起来 , 否则当用户点击跳转到别的页面再回来当前页面的时候,scrollY的值有可能会变成0

 

 

 

你可能感兴趣的:(监听RecyclerView滑动事件)