Я добавил функцию пагинации в свое приложение, но данные не могут загружаться больше. Когда я устанавливаю лимит в 20 данных, я добавляю 23 данных и загружаю больше, 20 данных невидимы и 3 данных видимы. Может кто-нибудь помочь мне исправить эту ошибку?
Снимок экрана с первыми 20 наборами данных:
Снимок экрана при прокрутке:
Код:
@Override
protected void onStart() {
super.onStart();
collectionReference.limit(20).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
if(!task.getResult().isEmpty()) {
documentsList.clear();
for (DocumentSnapshot documentSnapshot : task.getResult()) {
Documents documents = documentSnapshot.toObject(Documents.class);
documentsList.add(documents);
documentListAdapter.notifyDataSetChanged();
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
}
RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
isScrolling = true;
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int firstVisibleDocument = layoutManager.findFirstVisibleItemPosition();
int visibleDocumentCount = layoutManager.getChildCount();
int totalDocumentCount = layoutManager.getItemCount();
if (isScrolling && (firstVisibleDocument + visibleDocumentCount == totalDocumentCount) && !isLastItemReached) {
isScrolling = false;
collectionReferences.startAfter(lastVisible).limit(20).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
documentsList.clear();
for (DocumentSnapshot documentSnapshot : task.getResult()) {
Documents documents = documentSnapshot.toObject(Documents.class);
documentsList.add(documents);
documentListAdapter.notifyDataSetChanged();
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
}
if (task.getResult().size() < 20) {
isLastItemReached = true;
}
}
}
});
}
}
};
recyclerViewDocument.addOnScrollListener(onScrollListener);
}
}
}
});
}