Recycler上拉分页加载、下拉刷新
该需求采用RecyclerView、SwipeRefreshLayout以及第三方插件BRVAH结合使用方式完成,SwipeRefreshLayout完成下拉刷新、BRVAH完成上拉分页加载
- build.gradle 配置说明
allprojects {
repositories {
…
maven { url ‘https://jitpack.io’ }
}
}
添加依赖:compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30’
- Adapter 继承BaseQuickAdapter,重写父类的RecordRvAdapter、convert方法详细地址
> public class PaymentRecordRvAdapter extends BaseQuickAdapter<PaymentRecordListBean.DataBean,BaseViewHolder> {
private Context mContext;
/**
* @param layoutResId The layout resource id of each item. //内容的布局
* @param data A new list is created out of this one to avoid mutable list //数据源
*/
public PaymentRecordRvAdapter(int layoutResId, List<DataBean> data,Context mContext) {
super(layoutItemResId,dataBeans);
this.mContext = mContext;
}
@Override
protected void convert(BaseViewHolder helper, DataBean itemData) {
//获取相应控件实例、设置相应属性
ImageView imageView = helper.getView(R.id.iv_icon);
Glide.with(mContext).load(item.getIcon()).apply(new RequestOptions().centerCrop()).into(imageView);
helper.setText(R.id.tv_charge_type,item.getExpenseName())
.setText(R.id.tv_time,DateUtils.formatDate(item.getBillTime(),DateUtils.DB_DATA_FORMAT));
}
}
- layout.xml
//RecyclerView结合SwipeRefreshLayout实现下拉刷新功能
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/srl_refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:layout_marginTop="@dimen/y15"
android:id="@+id/rv_payment_record"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</android.support.v4.widget.SwipeRefreshLayout>
- .Activity
/**Description:初始化SwipeRefreshLayout的下拉刷新监听,整个生命周期有效*/
protected void initSwipeRefreshLayoutListener(){
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
......
adapterDataBeans.clear();//清空数据
quickAdapter.replaceData(adapterDataBeans);//调用QuickAdapter的replaceData通知数据清空
quickAdapter.setEnableLoadMore(true);//重新启动下拉分页加载响应
requestRecyclerDate();//启动刷新后初次数据加载
}
});
}
//初始化QuickAdapter监听
@Override
public void initBrvahListener() {
//item点击事件监听
quickAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
//do something
}
});
//上拉请求数据监听
quickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
//上拉请求开始前,需要停止swipeRefreshLayout的下拉刷新响应
swipeRefreshLayout.setEnabled(false);
requestRecyclerDate();
//上拉刷新结束后,需要开启swipeRefreshLayout的下拉刷新响应
swipeRefreshLayout.setEnabled(true);
}
}, recyclerView);
//设置该方法,初次加载数据不足时,系统即会停止响应下次上拉加载数据请求
quickAdapter.disableLoadMoreIfNotFullPage();
}
/**Description:添加分页数据*/
protected void addAdapterData(List<T> data){
if (data.size() != 0) {
pageNum++;
adapterDataBeans.addAll(data);
if (data.size() != PAGE_SIZE)
/**Description:完成本次请求,关闭上拉请求监听响应*/
quickAdapter.loadMoreEnd();
else
/**Description:完成本次请求*/
quickAdapter.loadMoreComplete();
} else {
/**Description:完成本次请求,关闭上拉请求监听响应*/
quickAdapter.loadMoreEnd();
}
}