RecyclerView непрерывно вызывает LoadMore - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь реализовать разбиение на страницы, используя приведенный ниже код, и он хорошо работает с фрагментами, но когда я реализовал его во вложенном фрагменте, он загружает все данные (загрузка первой страницы и всех последующих страниц непрерывно).Проблема в том, что общее количество элементов равно 12, а время их просмотра - 3, но layoutManager.getChildCount () дает мне 12 таких же, как общий элемент (layoutManager.getItemCount ()), поэтому он начинает загружать следующие страницы непрерывно.

ЗдесьЭто код прокрутки:

  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;
        }
    });

1 Ответ

0 голосов
/ 17 сентября 2018

смените слушателя прокрутки, как показано ниже:

@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
   }
}
}});
...