项目中对分页数据加载和刷新是最常见不过的了,运用SmartRefreshLayout控件,改控件是功能比较全面的刷新控件,值得深入学习一下
github地址:https://github.com/scwang90/SmartRefreshLayout
1.首页在lib-base(专门放库的项目中)引入刷新控件代码库:
api 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' //1.0.5及以前版本的老用户升级需谨慎,API改动过大
2.其次在布局文件xml中写布局:
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/srl_deal_flow"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srlEnableScrollContentWhenLoaded="true"
app:srlEnableFooterFollowWhenLoadFinished="true">
// RecyclerView 控件
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
3.初始化控件之类就不多说了,
4.下拉刷新和上拉加载更多方法调用网络数据:
private int page = 1;
// 下面10为offset 偏移量
mSrl_dealFlow.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
mSrl_dealFlow.getLayout().postDelayed(new Runnable() {
@Override
public void run() {
page = 1;
// 四个参数
getRechargeData(DateUtil.getYear(),DateUtil.getMonth(),page,10);
mSrl_dealFlow.finishRefresh();
mSrl_dealFlow.resetNoMoreData();//setNoMoreData(false);
}
},2000);
}
});
mSrl_dealFlow.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull final RefreshLayout refreshLayout) {
mSrl_dealFlow.getLayout().postDelayed(new Runnable() {
@Override
public void run() {
if (commonDealFlowAdapter.getCount() > 30) {
ToastUtil.show(getActivity(),"数据全部加载完毕");
refreshLayout.finishLoadMoreWithNoMoreData();//将不会再次触发加载更多事件
} else {
page++;
// 两个参数
getRechargeData(page,10);
refreshLayout.finishLoadMore();
}
}
},2000);
}
});
5.在初始化List集合的时候,需要在初始化数据的时候就要进行初始化:
@Override
public void initData(Bundle savedInstanceState) {
mRechargeList = ObjectUtil.newArrayList();
getRechargeData(1,10);
}
6.在处理服务端返回过来的数据,需要注意在page值为1的时候,也就是第一页的时候,需要将List集合中的数据进行清空,这个时候也就是下来刷新数据,
private void processRechargeData(String str) {
if(page == 1){
mRechargeList.clear();
}