有时候我们会在上拉的过程中,因为数据列表过于庞大,或者时刻在变化,这时候我们不能一次将数据列表全部加载出,这时候我们可以上拉到列表底部进行重新刷新,可以使用addOnScrollListener来实现。
首先实现一个布尔类型作为判断条件:
//这里使用一个布尔类型来判断Recyclerview中最后一个完整显示的item是不是整个列表最后一个item
public boolean isSlidingToLast = false;
然后在活动中实现逻辑:
//上拉刷新
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
//当页面的状态被改变(比如从静止到滑动,从滑动到静止,从滑动到惯性滑动等)会执行onScrollStateChanged方法
@Override
public void onScrollStateChanged(final RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//得到该Recyclerview的LayoutManger
scrollManager = (LinearLayoutManager) recyclerView.getLayoutManager();
// 当不滚动时
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
//获取最后一个完全显示的ItemPosition
int lastVisibleItemPosition = scrollManager.findLastCompletelyVisibleItemPosition();
//获取一整个Recyclerview的长度
int totalItemCount = scrollManager.getItemCount();
// 判断是否滚动到底部,并且是向下滚动
if (lastVisibleItemPosition == (totalItemCount - 1) && isSlidingToLast) {
//逻辑代码
Toast.makeText(view.getContext(),"bottom",Toast.LENGTH_SHORT).show();
}
}
}
//在刚进入页面,以及当页面正在处于滑动状态的时候,onScrolled会被调用。
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//dx用来判断横向滑动方向,dy用来判断纵向滑动方向
if (dy > 0) {
//大于0表示正在向下滚动
isSlidingToLast = true;
} else {
//小于等于0表示停止或向上滚动
isSlidingToLast = false;
}
}
});