in app/src/main/java/com/firebase/uidemo/database/realtime/FirebaseDbPagingActivity.java [52:130]
private void setUpAdapter() {
//Initialize Paging Configurations
PagingConfig config = new PagingConfig(30, 5, false);
//Initialize Firebase Paging Options
DatabasePagingOptions<Item> options = new DatabasePagingOptions.Builder<Item>()
.setLifecycleOwner(this)
.setQuery(mQuery, config, Item.class)
.build();
//Initializing Adapter
final FirebaseRecyclerPagingAdapter<Item, ItemViewHolder> mAdapter =
new FirebaseRecyclerPagingAdapter<Item, ItemViewHolder>(options) {
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_item, parent, false);
return new ItemViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ItemViewHolder holder,
int position,
@NonNull Item model) {
holder.bind(model);
}
};
mAdapter.addLoadStateListener(states -> {
LoadState refresh = states.getRefresh();
LoadState append = states.getAppend();
if (refresh instanceof LoadState.Error) {
LoadState.Error loadStateError = (LoadState.Error) refresh;
mBinding.swipeRefreshLayout.setRefreshing(false);
Log.e(TAG, loadStateError.getError().getLocalizedMessage());
}
if (append instanceof LoadState.Error) {
LoadState.Error loadStateError = (LoadState.Error) append;
mBinding.swipeRefreshLayout.setRefreshing(false);
Log.e(TAG, loadStateError.getError().getLocalizedMessage());
}
if (append instanceof LoadState.Loading) {
mBinding.swipeRefreshLayout.setRefreshing(true);
}
if (append instanceof LoadState.NotLoading) {
LoadState.NotLoading notLoading = (LoadState.NotLoading) append;
if (notLoading.getEndOfPaginationReached()) {
// This indicates that the user has scrolled
// until the end of the data set.
mBinding.swipeRefreshLayout.setRefreshing(false);
showToast("Reached end of data set.");
return null;
}
if (refresh instanceof LoadState.NotLoading) {
// This indicates the most recent load
// has finished.
mBinding.swipeRefreshLayout.setRefreshing(false);
return null;
}
}
return null;
});
mBinding.pagingRecycler.setLayoutManager(new LinearLayoutManager(this));
mBinding.pagingRecycler.setAdapter(mAdapter);
// Reload data on swipe
mBinding.swipeRefreshLayout.setOnRefreshListener(() -> {
//Reload Data
mAdapter.refresh();
});
}