Вы должны использовать ScrollListener в вашем обзоре / просмотре списков.при запуске вы получаете 25 пределов данных, как только пользователь снова прокручивает страницу до конца, вы должны сделать новый вызов Firestore с ограничением (что бы вы ни сохраняли).но в это время вы должны продолжать использовать startAt()
в своем запросе.ввод в startAt()
будет вашим последним ключом из первых полученных данных. Это просто базовый обзор.Вы можете ссылаться на эту ссылку для запроса.
Вы можете создать нумерацию страниц в обзоре / просмотре списка утилит с помощью firestore следующим образом:
В основном выполните следующие действия:
1) При открытии Activity / Fragment ваш первый запрос получит 25 пределов данных
Query first = db.collection("cities")
.orderBy("population")
.limit(25);
first.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
// add data to recyclerView/listview
// Get the last visible document
DocumentSnapshot lastVisible = documentSnapshots.getDocuments()
.get(documentSnapshots.size() -1);
}
});
2) Теперь перезаписать onScrollListener адаптера
boolean isEndChildResults = false;
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
isScrolling = true;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
currentVisibleItem = linearLayoutManager.getChildCount();
totalItem = linearLayoutManager.getItemCount();
scrolledItem = linearLayoutManager.findFirstVisibleItemPosition();
if (isScrolling && (currentVisibleItem + scrolledItem == totalItem) && !isEndChildResults && documentSnapshot != null) {
isScrolling = false;
mProgressBarScroll.setVisibility(View.VISIBLE);
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
Query query = firebaseFirestore.collection(...).document(...).limit(25).orderBy(...).startAt(lastVisible);
query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
// add data to recyclerView/listview
lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() -1);
if (task.getResult().size() < postPerPageLimit) {
// if your result size is less than your query size which means all the result has been displayed and there is no any other data to display
isEndChildResults = true;
}
}
}
}
});
if(isEndChildResults){
// show snackbar/toast
}
}
* lastVisible documentSnapshot будетизменяться при каждой прокрутке, и он будет извлекать данные из lastVisible снимок