Recyclerview
comes with its own scroll listener which has the following methods :
void onScrollStateChanged(RecyclerView recyclerView, int newState)
There are essentially 3 steps.
But first, we need a Callback which would work as a bridge between RecyclerView.Adapter and Activity
public interface PaginationCallBack{
public void oadNextPage();
}
Implement this callback in Your Activity
class YourActivity extends AppCompatActivity implements PaginationCallBack{
int pageNum = 1;
@Override
public void loadNextPage(){
// Your implementation
}
}
Initialize Callback in RecyclerView.Adapter
class YourAdapter extends RecyclerView.Adapter{
private PaginationCallBack paginationCallBack;
public YourAdapter(PaginationCallBack paginationCallBack) {
this.paginationCallBack = paginationCallBack;
}
}
STEP 1
Add a condition in onBindViewHolder
method and notify with a Callback.
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewholder, int position) {
if(position+1==images.size()){
paginationCallBack.loadNextPage(); // Callback
}
}
Step 2: Call NEXT Page
getImages(++pageNum) // YOUR REST method which page number
@Override
public void loadNextPage(){
getImages(++pageNumber) // REST call with next Page
}
Step 3 Add the result in old list and notify datasetChanged
public void getImages(int pageNum){
List newResults = //RESTCALL
imageList.addAll(newResults);
adapter.updateDataSet(imageList)
}
updateDataSet(imageList)
method?Write this method inside RecyclerView.Adapter
public void updateDataSet(List newImages){
if(newImages!=null){
images = newImages;
}
notifyDataSetChanged();
}
RecyclerView Pagination