How to implement pagination in RecyclerView on scroll

前端 未结 2 747
礼貌的吻别
礼貌的吻别 2021-01-22 06:13

Recyclerview comes with its own scroll listener which has the following methods :

void onScrollStateChanged(RecyclerView recyclerView, int newState)         


        
2条回答
  •  佛祖请我去吃肉
    2021-01-22 07:02

    Make Next Call at the end of scroll

    There are essentially 3 steps.

    1. Notify when the list is scrolled
    2. Make REST call (for NEXT page)
    3. Add the result in the old list + Notify DataSet change

    CALLBACK

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

    Where is updateDataSet(imageList) method?

    Write this method inside RecyclerView.Adapter

     public void updateDataSet(List newImages){
    
        if(newImages!=null){
            images = newImages;
        }
    
        notifyDataSetChanged();
    }
    

    Full Code

    RecyclerView Pagination

    Result:

提交回复
热议问题