如何在滚动上的RecyclerView中实现分页 [英] How to implement pagination in RecyclerView on scroll

查看:1366
本文介绍了如何在滚动上的RecyclerView中实现分页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Recyclerview带有其自己的滚动侦听器,该侦听器具有以下方法:

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

void onScrollStateChanged(RecyclerView recyclerView, int newState)

RecyclerView的滚动状态更改时要调用的回调方法.

Callback method to be invoked when RecyclerView's scroll state changes.

void onScrolled(RecyclerView recyclerView, int dx, int dy)

滚动RecyclerView时要调用的回调方法.

Callback method to be invoked when the RecyclerView has been scrolled.

滚动到达列表末尾时,有什么方法可以触发加载程序加载更多数据吗?

Is there any way to trigger loader to load more data when scroll reaches end of the list?

我已经实现了这种方式:

I have implemented this way:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    GenerItem generItem=generItems.get(i);
    Log.d("TAG","position "+i);
    if(i==generItems.size()-1)
    ((GenerSearchActivity)mContext).onScroll(i);
    viewHolder.bindValues(generItem);
}

在Activity中的onScroll(),将触发加载程序加载更多数据.什么是最好的方法,请提出建议.

Here onScroll() in Activity, will trigger the loader to load more data. What is the best way please suggest.

推荐答案

在滚动结束时进行下一个调用

基本上有3个步骤.

  1. 滚动列表时通知
  2. 进行REST调用(用于NEXT页面)
  3. 将结果添加到旧列表中+通知数据集更改

回叫

但是首先,我们需要一个Callback,它将作为RecyclerView.Adapter和Activity之间的桥梁

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

在RecyclerView.Adapter中初始化回调

Initialize Callback in RecyclerView.Adapter

class YourAdapter extends RecyclerView.Adapter{

     private PaginationCallBack paginationCallBack;

     public YourAdapter(PaginationCallBack paginationCallBack) {
        this.paginationCallBack = paginationCallBack;
     }

}

步骤1 onBindViewHolder方法中添加条件并通过回调进行通知.

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
    }

}

第2步:呼叫下一页

getImages(++ pageNum)//您的REST方法的页码

getImages(++pageNum) // YOUR REST method which page number

@Override
public void loadNextPage(){
    getImages(++pageNumber) // REST call with next Page 
}

第3步,将结果添加到旧列表中,并通知datasetChanged

Step 3 Add the result in old list and notify datasetChanged

public void getImages(int pageNum){

      List<Images> newResults = //RESTCALL
      imageList.addAll(newResults);
      adapter.updateDataSet(imageList)

}

updateDataSet(imageList)方法在哪里?

将此方法写入RecyclerView.Adapter

Where is updateDataSet(imageList) method?

Write this method inside RecyclerView.Adapter

 public void updateDataSet(List<GalleryMedia> newImages){

    if(newImages!=null){
        images = newImages;
    }

    notifyDataSetChanged();
}

完整代码

RecyclerView分页

这篇关于如何在滚动上的RecyclerView中实现分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆