基本思路
监听RecyclerView的上滑,获取最后一个可见的Item的Position,当其为最后一个Item时进行加载。
在onScrolled方法中获取最后一个可见的item的position
在onScrollStateChanged方法中进行判断:当newState为SCROLL_STATE_IDLE且最后一个可见的item的position为item总数-1时进行加载。
局部代码实现如下:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
private int lastVisiblePosition;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
if (lastVisiblePosition == adapter.getInnerItemCount() - 1) {
//TODO load data
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
if (layoutManager instanceof LinearLayoutManager) {
LinearLayoutManager lm = (LinearLayoutManager) layoutManager;
lastVisiblePosition = lm.findLastVisibleItemPosition() - 1;
} else if (layoutManager instanceof GridLayoutManager) {
GridLayoutManager gm = (GridLayoutManager) layoutManager;
lastVisiblePosition = gm.findLastVisibleItemPosition() - 1;
} else if (layoutManager instanceof StaggeredGridLayoutManager) {
StaggeredGridLayoutManager sm = (StaggeredGridLayoutManager) layoutManager;
int[] into = sm.findLastVisibleItemPositions(null);
lastVisiblePosition = into[into.length - 1] - 1;
}
}
});