Query query = mDatabaseReference.orderByKey().limitToLast(50);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
boolean isFirst = true;
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
if (isFirst) {
isFirst = false;
oldPostId = postSnapshot.getKey();
}
Post post = postSnapshot.getValue(Post.class);
if (post != null)
mPostRecyclerAdapter.addPost(new Post(post.getUserName(), post.getPost(), post.getPostOwnerUuid(), postSnapshot.getKey(), post.getTotalLikes(), post.getPostTime(), post.getCategoryName()));
}
//set your adapter here after adding item to recycler view
}
Теперь с помощью OnscrollListener переработчика просмотра.
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 && oldPostId != null) {
scrollCount++;
showInterstitial(scrollCount);
isScrolling = false;
mProgressBarScroll.setVisibility(View.VISIBLE);
Query query = mDatabaseReference.orderByKey().endAt(oldPostId).limitToLast(50);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
int count = 0;
mPostRecyclerAdapter.clearReversePostList();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
count++;
if (dataSnapshot.getChildrenCount() < 50) {
isEndChildResults = true;
} else {
if (count == 1) {
oldPostId = postSnapshot.getKey();
}
}
if (count != 50) {
Post post = postSnapshot.getValue(Post.class);
if (post != null)
mPostRecyclerAdapter.addPost(new Post(post.getUserName(), post.getPost(), post.getPostOwnerUuid(), postSnapshot.getKey(), post.getTotalLikes(), post.getPostTime(), post.getCategoryName()));
mPostRecyclerAdapter.notifyDataSetChanged();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
if (isEndChildResults && (firstVisibleItem < scrolledItem) && !isSnackBarShown) {
snackbar = Snackbar.make(coordinatorLayout, R.string.no_more_post_available, Snackbar.LENGTH_INDEFINITE)
.setAction(getString(R.string.ok), new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
}
});
snackbar.show();
isSnackBarShown = true;
}
}
});