其实已经有很多上拉加载更多、或者滑动到底自动加载的自定义RecyclerView,这里所使用的方案是通用于RecyclerView的,目的就是为了提高代码复用
通常在app的列表中会使用分页加载数据,当用户停止滑动列表到达底部时会加载下一页数据;为了更好地用户体验,可以在列表停止滑动是会提前几个item加载下一页数据。
public static void setLoad(@NonNull RecyclerView recyclerView, final OnLoadCallback onLoadCallback) {
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
int visibleLast = -1;
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(newState == SCROLL_STATE_IDLE){
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if(layoutManager == null){
return;
}
if (layoutManager instanceof LinearLayoutManager) {
visibleLast = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition();
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
int[] lastItemArr = ((StaggeredGridLayoutManager) layoutManager).findLastVisibleItemPositions(null);
if (lastItemArr.length > 0) {
visibleLast = lastItemArr[lastItemArr.length -