Я пытаюсь реализовать разбиение на страницы, используя приведенный ниже код, и он хорошо работает с фрагментами, но когда я реализовал его во вложенном фрагменте, он загружает все данные (загрузка первой страницы и всех последующих страниц непрерывно).Проблема в том, что общее количество элементов равно 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;
}
});