【问题标题】:RecyclerView call LoadMore pagination continuouslyRecyclerView 不断调用 LoadMore 分页
【发布时间】:2018-09-18 02:21:43
【问题描述】:

我正在尝试使用下面的代码实现分页,并且它适用于片段,但是当我在嵌套片段中实现它时,它会加载所有数据(连续加载第一页和所有下一页)。问题是我的总项目数是 12,及时可见是 3,但 layoutManager.getChildCount() 给我 12 与总项目 (layoutManager.getItemCount()) 相同,因此它开始连续加载下一页。

这里是 oNScroll 代码:

  public PaginationScrollListener(LinearLayoutManager layoutManager) {
    this.layoutManager = layoutManager;
}

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    super.onScrolled(recyclerView, dx, dy);

    int visibleItemCount = layoutManager.getChildCount();
    int totalItemCount = layoutManager.getItemCount();
    int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();

    if (!isLoading() && !isLastPage()) {
        if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount
                && firstVisibleItemPosition >= 0
                && totalItemCount >= getTotalPageCount()) {
            loadMoreItems();
        }
    }

}

当滚动和请求下一页时:

        recyclerView.addOnScrollListener(new PaginationScrollListener(layoutManager) {
        @Override
        protected void loadMoreItems() {
            isLoading = true;
            currentPage += 1;

            // mocking network delay for API call
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    loadNextPage();
                }
            }, 1000);
        }

        @Override
        public int getTotalPageCount() {
            return TOTAL_PAGES;
        }

        @Override
        public boolean isLastPage() {
            return isLastPage;
        }

        @Override
        public boolean isLoading() {
            return isLoading;
        }
    });

【问题讨论】:

  • 我已经用过了,但我遇到了同样的问题,它 loadInitial() 和 loadAfter() 也连续调用..,那是我在 Nested Fragment 中实现它,但在 Fragment 中它运行良好
  • 我也遇到了同样的问题,一直在调用 loadAfter...

标签: android android-recyclerview pagination


【解决方案1】:

如下改变你的滚动监听器:

@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if(dy>0){  //if is scrolling vertically
   int visibleItemCount = layoutManager.getChildCount();
   int totalItemCount = layoutManager.getItemCount();
   int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
   if (!isLoading() && !isLastPage()) {
      if (firstVisibleItemPosition + visibleItemCount >= totalItemCount) {
      //make your request here
   }
}
}});

【讨论】:

  • 我改成了 firstVisibleItemPosition(我以前是这样命名的)
  • 您是否在提出请求之前增加页码: if (firstVisibleItemPosition + visibleItemCount >= totalItemCount) { //在此处提出请求 }
  • 加载所有数据是一样的
  • 如果可以的话,我可以看看你的要求吗
猜你喜欢
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2018-12-07
  • 2021-07-18
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2021-07-24
相关资源
最近更新 更多