Pagination Documentation

This pagination library makes it easy to deal with paginating large set of data in a consistent way.

../_images/pagination.png

The paginators use DataListener to notify you of any changes that happen e.g

If data for first page is ready for use the DataListener

Paginate data from a List

To paginate a list of records we need to use ListPaginator.

List data = "..."
MyDataListener datalisterner = new MyDataListener();

ListPaginator pager = new ListPaginator(datalisterner);
pager.setData(data);
// set Page size
pager.setPageSize(20);

// invoke this method to trigger fetching of next page of data
pager.fetchNextPageData();

Paginate data from database

To fetch data from the database we need to use SqlPaginator.

// get and instance SQLiteDatabase
SQLiteDatabase db = "...";

MyDataListener datalisterner = new MyDataListener();

SqlPaginator pager = new SqlPaginator(datalisterner, db);
// set Page size
pager.setPageSize(20);

// pass in the sql the paginator will use to fetch data
String sql = "select * from employee where paid_date = ?";
String[] = new String[]{"1-12-2018"};
pager.query(sql, params);

// invoke this method to trigger fetching of next page of data
pager.fetchNextPageData();

Create a DataListener

A Paginator requires a DataListener

Create a DataListener this by implementing the DataListener interface.

public class MyDataListener implements DataListener {

    @Override
    public void onLastPageDataLoaded() {
        // we dont need the load more button if we an on the last page of out data
        loadMoreBtn.setVisibility(View.GONE);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onFirstPageDataLoaded(boolean hasMorePages) {
        // update the load more button
        nextBtn(hasMorePages);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onNextPageDataLoaded() {
        adapter.notifyDataSetChanged();
    }

    void nextBtn(boolean hasMorePages) {
        String msg = getString(R.string.nextPageBtn) + " " + paginator.getCurrentPageString();
        loadMoreBtn.setText(msg);
        if (hasMorePages) {
            loadMoreBtn.setVisibility(View.VISIBLE);
        } else {
            loadMoreBtn.setVisibility(View.GONE);
        }
    }

    @Override
    public void dataUpdate(List<Map> records) {
        // update the adapter with more data as we get them.
        adapter.update(records);
    }

    @Override
    public void preDataLoad(boolean hasMorePages) {
        nextBtn(hasMorePages);
    }
}