gpt4 book ai didi

android - 如何在RecyclerView on scroll中实现分页

转载 作者:行者123 更新时间:2023-12-05 00:00:11 28 4
gpt4 key购买 nike

Recyclerview 带有自己的滚动监听器,它有以下方法:

void onScrollStateChanged(RecyclerView recyclerView, int newState)

当 RecyclerView 的滚动状态改变时调用的回调方法。

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

滚动 RecyclerView 时调用的回调方法。

有什么方法可以在滚动到列表末尾时触发加载器加载更多数据?

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

这里的onScroll()在Activity中,会触发loader加载更多的数据。最好的方法是什么,请提出建议。

最佳答案

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

enter image description here

基本上有 3 个步骤。

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

回调

但首先,我们需要一个回调,它可以作为 RecyclerView.Adapter 和 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;
}

}

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

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewholder, int position) {

if(position+1==images.size()){
paginationCallBack.loadNextPage(); // Callback
}

}

第 2 步:调用下一页

getImages(++pageNum)//YOUR REST 方法获取页码

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

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

public void getImages(int pageNum){

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

}

updateDataSet(imageList) 方法在哪里?

在RecyclerView.Adapter里面写这个方法

 public void updateDataSet(List<GalleryMedia> newImages){

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

notifyDataSetChanged();
}

完整代码

RecyclerView Pagination

结果:

enter image description here

关于android - 如何在RecyclerView on scroll中实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com