使用findLastCompletelyVisibleItemPosition()实现上滑加载新数据

页面加载相关代码:

recyclerView.addOnScrollListener(new OnLoadMoreListener() {
	@Override
    public void onLoadMore() {
		if (canLoadMore) {
			canLoadMore = false;  //
			presenter.doLoadMoreData(); //加载数据并显示
		}
	}
});

监听器:

public abstract class OnLoadMoreListener extends RecyclerView.OnScrollListener {
    private LinearLayoutManager layoutManager;
    private int itemCount, lastPosition, lastItemCount;
    public abstract void onLoadMore();

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
            layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
            itemCount = layoutManager.getItemCount();
            lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
        } else {
            Log.e("OnLoadMoreListener", "The OnLoadMoreListener only support LinearLayoutManager");
            return;
        }

        if (lastItemCount != itemCount && lastPosition == itemCount - 1) {
         //lastItemCount 是为了防止加载数据后,位置仍然符合lastPosition == itemCount - 1,因此会继续加载
            lastItemCount = itemCount;
            this.onLoadMore();
        }
    }
}

Android使用LayoutManager的findFirstCompletelyVisibleItemPosition和findLastCompletelyVisibleItemPosition判断是否加载新数据注意

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章