如何在滚动上的RecyclerView中实现分页 [英] How to implement pagination in RecyclerView on scroll
问题描述
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个步骤.
- 滚动列表时通知
- 进行REST调用(用于NEXT页面)
- 将结果添加到旧列表中+通知数据集更改
回叫
但是首先,我们需要一个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中实现分页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!