我在搜索Web方面以及stackoverflow上都进行了很多搜索,但是我的问题还是一样。我做了很多尝试,但是没用。
经过大量尝试,我编写了这段代码,但是它只能单向运行。我的意思是我可以向上滚动并且分页效果很好(带有一些闪烁:)),但是它不允许我向上滚动。我的意思是新项目不断增加,但是我无法浏览recyclerview的先前项目。
这是我的代码
mQuery = mFirestore.collection("artists")
.orderBy(Artist.FIELD_ARTISTNAME, Query.Direction.ASCENDING)
.limit(LIMIT);
fillList(mQuery);
mQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
Toast.makeText(MainActivity.this, "first page loaded", Toast.LENGTH_SHORT).show();
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);
int firstVisibleItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
int visibleItemCount = linearLayoutManager.getChildCount();
int totalItemCount = linearLayoutManager.getItemCount();
Toast.makeText(MainActivity.this, firstVisibleItem + " and " + visibleItemCount + " and " + totalItemCount, Toast.LENGTH_SHORT).show();
if (isScrolling && (firstVisibleItem + visibleItemCount == totalItemCount) && !isLastItemReached) {
isScrolling = false;
mQuery = mFirestore.collection("artists")
.orderBy(Artist.FIELD_ARTISTNAME, Query.Direction.ASCENDING)
.startAfter(lastVisible)
.limit(LIMIT);
mQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
fillList(mQuery);
mAdapter.notifyDataSetChanged();
lastVisible = task.getResult().getDocuments().get(task.getResult().size() - 1);
Toast.makeText(MainActivity.this, "next page loaded", Toast.LENGTH_SHORT).show();
if (task.getResult().size() < LIMIT) {
isLastItemReached = true;
}
}
});
}
}
};
mRestaurantsRecycler.addOnScrollListener(onScrollListener);
}
});
这是fillList函数的代码
public void fillList(Query myQuery) {
// RecyclerView
mAdapter = new ArtistAdapter(myQuery, this) {
@Override
protected void onDataChanged() {
// Show/hide content if the query returns empty.
if (getItemCount() == 0) {
mRestaurantsRecycler.setVisibility(View.GONE);
mEmptyViewText.setText(getResources().getString(R.string.message_no_results));
mEmptyViewExit.setTag("noRecords");
mEmptyViewExit.setText(getResources().getString(R.string.no_records_button));
mEmptyView.setVisibility(View.VISIBLE);
} else {
mRestaurantsRecycler.setVisibility(View.VISIBLE);
mEmptyView.setVisibility(View.GONE);
}
}
@Override
protected void onError(FirebaseFirestoreException e) {
// Show a snackbar on errors
Snackbar.make(findViewById(android.R.id.content),
"Error: check logs for info.", Snackbar.LENGTH_LONG).show();
}
};
mRestaurantsRecycler.setLayoutManager(new LinearLayoutManager(this));
mRestaurantsRecycler.setAdapter(mAdapter);
}