private void setUpAdapter()

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();
        });
    }