Я использую представление переработчика с блесной в моем приложении.он загружает посты по различным предметам, таким как физика, химия ... и т.д.элемент по умолчанию в блесне - «Все предметы», которые загружают все вопросы.Я использую бесконечный вид переработчика для загрузки новых данных при достижении конца.в начале это работает хорошо, и после того, как я изменяю тему в счетчике, новый список также работает хорошо, но после этого, когда я изменяю тему в счетчике в третий раз, новый список приходит только с начальными данными и не загружаетсябольше данных, когда я прокручиваю до конца.
это мой код докладчика:
public void getPosts(final String currentSubject) {
postsList = new ArrayList<>();
view.startRecyclerAdapter(postsList);
view.showProgressBar();
view.hideNoPostsText();
view.notifyAdapter();
OnCompleteListener postsListener = new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull final Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
getPostData(document);
}
if (postsList.size() == 0) {
view.onNoPostsExists();
} else {
view.onDataFound();
}
if(task.getResult().size() > 0 ) {
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
lastPosition = task.getResult().size() - 1;
}
RecyclerView.OnScrollListener onScrollListener = 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);
LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) recyclerView.getLayoutManager());
int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition();
int visibleItemCount = linearLayoutManager.getChildCount();
int totalItemCount = linearLayoutManager.getItemCount();
if (isScrolling && (firstVisibleItemPosition + visibleItemCount == totalItemCount) && !isLastItemReached) {
isScrolling = false;
OnCompleteListener secondQueryCompleteListener = new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> t) {
if (t.isSuccessful()) {
for (DocumentSnapshot d : t.getResult()) {
getPostData(d);
}
view.notifyAdapter();
if(t.getResult().size() > 0) {
lastVisible = t.getResult().getDocuments().get(t.getResult().size() - 1);
lastPosition += 5;
}
Log.v("LoggingPosition", "last position is : " + lastPosition);
if (t.getResult().size() < limit) {
isLastItemReached = true;
}
}
}
};
if (currentSubject.equals("كل المواد")) {
Query nextQuery = fireStorePosts.orderBy("date", Query.Direction.DESCENDING)
.startAfter(lastVisible).limit(limit);
nextQuery.get().addOnCompleteListener(secondQueryCompleteListener);
}
else {
Query nextQuery = fireStorePosts.whereEqualTo("subject", currentSubject)
.orderBy("date", Query.Direction.DESCENDING).startAfter(lastVisible).limit(limit);
nextQuery.get().addOnCompleteListener(secondQueryCompleteListener);
}
}
}
};
view.setOnScrollListener(onScrollListener);
} else {
Log.v("TAG", "failed");
}
}
};
if (currentSubject.equals("كل المواد")) {
firstQuery = fireStorePosts.orderBy("date", Query.Direction.DESCENDING).limit(limit);
firstQuery.get().addOnCompleteListener(postsListener);
} else {
firstQuery = fireStorePosts.whereEqualTo("subject", currentSubject)
.orderBy("date", Query.Direction.DESCENDING).limit(limit);
firstQuery.get().addOnCompleteListener(postsListener);
}
}
и это связанные методы на мой взгляд:
@Override
public void notifyAdapter() {
recyclerAdapter.notifyDataSetChanged();
}
@Override
public void setOnScrollListener(RecyclerView.OnScrollListener onScrollListener) {
recyclerView.addOnScrollListener(onScrollListener);
}