最近公司里提出一个需求,实现recyclerview的分页加载。之前在学校一直想实现这个功能一直没有合适的时间去研究,现在抽空实现了一个简单的Demo。
实现的功能:
- 第一次进入界面显示SwipeRefreshLayout的下拉刷新效果
- 上拉分页加载,底部显示正在加载
- 数据全部加载完毕后显示没有更多
效果如下
源码GIT地址,欢迎Star、Fork。
代码实现:
首先贴上RecyclerView的adapter的关键代码,在代码中有详细的注释
两个不同的ViewHolder,分别用来初始化正常的item以及脚布局。
/**
* 正常布局的ViewHolder
*/
class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(View itemView) {
super(itemView);
}
}
/**
* 脚布局的ViewHolder
*/
public static class FootViewHolder extends RecyclerView.ViewHolder {
public FootViewHolder(View itemView) {
super(itemView);
}
}
这里通过重写getItemViewType
方法来获取不同类型的布局。重写getItemCount
,由于多加了一个脚布局所以要+1;
public int getItemViewType(int position) {
//如果position加1正好等于所有item的总和,说明是最后一个item,将它设置为脚布局
if (position + 1 == getItemCount()) {
return TYPE_FOOTER;
} else {
return TYPE_ITEM;
}
}
@Override
public int getItemCount() {
return mList.size() == 0 ? 0 : mList.size() + 1;
}
在onCreateViewHolder
判断类型,以及加载不同的布局。同时在onBindViewHolder
中进行不同情形下的处理
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {