1、自定义recyclerview滑动监听类RecyclerViewScrollListener
代码:
/**
* 自定义recyclerview滑动监听
*/
public class RecyclerViewScrollListener extends RecyclerView.OnScrollListener {
//监听回调
private PullOnScrollListener listener;
public RecyclerViewScrollListener(PullOnScrollListener listener) {
this.listener = listener;
}
boolean isUpScroll = false; //是否正在上滑标记
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (newState == RecyclerView.SCROLL_STATE_IDLE) { //当前未滑动
int itemCount = manager.getItemCount(); //总数
int lastItemPosition = manager.findLastCompletelyVisibleItemPosition();//最后显示的位置
if (lastItemPosition == (itemCount - 1) && isUpScroll) {
listener.onLoadMore();
}
int fristItemPosition = manager.findFirstCompletelyVisibleItemPosition();//第一个显示的位置
if (fristItemPosition == (0) && !isUpScroll){
listener.onRefresh();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// 大于0表示正在向上滑动,小于等于0表示停止或向下滑动
isUpScroll = dy > 0;
}
public interface PullOnScrollListener {
//上拉加载更多的方法
public void onLoadMore() ;
//下拉刷新的方法
public void onRefresh() ;
}
}
2、在activity和fragment中实现方式
给xml中的RecyclerView控件添加自定义监听实现
代码实现:
binding.recyclerView.addOnScrollListener(new RecyclerViewOnScrollListener(onScrollListener));
private RecyclerViewOnScrollListener.PullOnScrollListeneronScrollListener =new RecyclerViewOnScrollListener.PullOnScrollListener() {
@Override
public void onLoadMore() {
//上拉处理逻辑
}
@Override
public void onRefresh() {
//下拉刷新
}
};