监听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