在合肥做网站多少钱/百度软文推广公司
RecylerView结合 BRAVH 以及googl原生的 SwipeRefreshLayout 实现RecylerView的 上拉加载更多和下拉刷新功能
https://blog.csdn.net/JerryWu145/article/details/52225898
- 下拉刷新是通过实现 SwipeRefreshLayout.OnRefreshListener 接口来实现的,也就是说下拉刷新具有了通用性,不只是 RecyclerView ;
- 加载更多要通过 LinearLayoutManager 来获取 RecyclerView 是否滑动到底部来实现。
1 :上拉加载更多
1-1 Adapter实现接口 : RecylerViewAdapter extends BaseQuickAdapter implements UpFetchModule,LoadMoreModule
1-2 设置loadMoreData 监听:
adapterdemo.getLoadMoreModule().setOnLoadMoreListener(new OnLoadMoreListener() {@Overridepublic void onLoadMore() {Log.e(TAG," adapterdemo onLoadMore enter");configLevelTypeList(DATA_SOURCE);}});
1-3 触发onLoadMore函数的回调
private void configLoadMoreData() {dataList = data.getDataList();Log.e(TAG,"onCreate data = " + dataList);if (dataList == null || dataList.size() ==0) {showRecylerView(false);return;}// 下面代码是模拟环境代码(模拟app需要分页向服务器三次下载数据)if (count == 3) {// 模拟3次 分页加载Log.e(TAG,"success count = " + count + "---服务器数据很多需要经过3次下载完毕");adapterdemo.getLoadMoreModule().loadMoreEnd();return;}if (dataList.size() < 3) {// 每次请求到3个,就认为是本次加载结束,需要发起下一次请求Log.e(TAG,"success count = " + count + "---服务器数据不够一次下载完毕");adapterdemo.getLoadMoreModule().loadMoreEnd();count++;} else {Log.e(TAG,"success count = " + count + "---数据没下载完毕需要继续向服务器下载");// 注意不是加载结束,而是本次数据加载结束并且还有下页数据adapterdemo.getLoadMoreModule().loadMoreComplete();count++;}adapterdemo.addData(dataList);}
2 : 使用 Google原生的 SwipeRefreshLayout 实现下拉刷新功能
private void configSwipRefreshData(){swipRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {Log.e(TAG,"configSwipRefreshData onRefresh enter");configLevelTypeList(REFRESH_DATA_SOURCE);}});}
private void configAdapter(boolean isSuccessGet,boolean isSwipRefresh) {showRecylerView(isSuccessGet);
// adapterDemo.getLoadMoreModule().setLoadMoreView(new CustomLoadMoreView());
// adapterDemo.getLoadMoreModule().loadMoreToLoading();Log.e(TAG," configAdapter isSwipRefresh = " + isSwipRefresh);if (isSwipRefresh) {dataList = data.getDataList();// TODO 事实上时不能清空数据的,但是不清空,新数据又不能刷新adapterdemo.getData().clear();adapterdemo.addData(dataList);// 收起正在刷新的加载动画swipRefresh.setRefreshing(false);} else {configLoadMoreData();}}