1、给RecyclerView添加滚动监听:
//添加监听
addOnScrollListener(mOnScrollListener);
2、在onScrolled方法中
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
LayoutManager layoutManager = recyclerView.getLayoutManager();
int mLastChildPosition = layoutManager .findLastVisibleItemPosition();
int itemTotalCount = layoutManager .getItemCount();
View lastChildView = layoutManager .getChildAt(layoutManager .getChildCount()-1);
if (lastChildView == null) return;
int lastChildBottom = lastChildView.getBottom();
int recyclerBottom = recyclerView.getBottom();
if (mLastChildPosition == itemTotalCount - 1 && lastChildBottom == recyclerBottom) {
if (isCanLoadMore && listener != null) {
//业务代码
listener.loadMore();
}
}
}
思路:
- 判断当前屏幕可显示的最后一个item的当前位置下标等于最后一个item的位置下标
- 当前屏幕可显示的最后一个item的bottom值等于recyclerView的bottom值
满足这两个条件即可触发自动加载更多
各方法分析:
layoutManager.findLastVisibleItemPosition
获取当前屏幕可显示的最后一个item的位置下标layoutManager.getItemCount()
获取当前总item个数layoutManager.getChildCount()
获取当前屏幕可显示的item的个数layoutManager.getChildAt(int position)
获取当前位置的view
注意此方法只能获取屏幕显示的部分,如屏幕当前显示6个item,此时position只能传0到5,否则获取不到ViewlastChildView.getBottom()
获取当前屏幕显示的最后一个item的bottom值recyclerView.getBottom()
获取recyclerView的bottom值