封面
項目中的需求,RecyclerView橫向滑動列表纫事,要有加載更多的功能勘畔,給RecyclerView設置一個滑動監(jiān)聽所灸,在onScrolled方法中判斷一下滑動方向,然后在onScrollStateChanged方法中判斷一下是否滑動到了最后一個item即可炫七,代碼中已經(jīng)寫了詳細的注釋:
public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
// 用來標記是否正在向左滑動
private boolean isSlidingToLeft = false;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
// 當不滑動時
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
// 獲取最后一個完全顯示的itemPosition
int lastItemPosition = manager.findLastCompletelyVisibleItemPosition();
int itemCount = manager.getItemCount();
// 判斷是否滑動到了最后一個item爬立,并且是向左滑動
if (lastItemPosition == (itemCount - 1) && isSlidingToLeft) {
// 加載更多
onLoadMore();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// dx值大于0表示正在向左滑動,小于或等于0表示向右滑動或停止
isSlidingToLeft = dx > 0;
}
/**
* 加載更多回調(diào)
*/
public abstract void onLoadMore();
}
看下如何使用:
// 設置加載更多監(jiān)聽
recyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener() {
@Override
public void onLoadMore() {
// 加載更多
}
});