控件刷新和加载
- 引入控件
api ‘com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-21’
- 刷新控制类
public class PullRefreshBean {
public int pageSize = 10;
public int pageIndex = 1;
public boolean isRefreshing = false;
public boolean isLoadMoreing = false;
private boolean isDisableRefresh = false;
private boolean isDisableLoadMore = false;
public PullRefreshBean(){
}
/**
*
* @param disableRefresh 是否禁止了下拉刷新
* @param disableLoadMore 是否禁止了上拉加载
*/
public PullRefreshBean(boolean disableRefresh, boolean disableLoadMore){
this.isDisableRefresh = disableRefresh;
this.isDisableLoadMore = disableLoadMore;
}
/**
* 加载更多时的设置
* @param pullRefreshBean
* @param smartRefreshLayout
*/
public void setLoardMore(@NotNull PullRefreshBean pullRefreshBean, @NotNull SmartRefreshLayout smartRefreshLayout){
if (pullRefreshBean.isRefreshing) {
smartRefreshLayout.finishLoadMore();
return;
}
pullRefreshBean.pageIndex++;
pullRefreshBean.isLoadMoreing = true;
}
/**
* 下拉刷新时的一些设置
* @param pullRefreshBean
* @param smartRefreshLayout
*/
public void setRefresh(@NotNull PullRefreshBean pullRefreshBean, @NotNull SmartRefreshLayout smartRefreshLayout){
if (pullRefreshBean.isLoadMoreing) {
smartRefreshLayout.finishRefresh();
return;
}
pullRefreshBean.pageIndex = 1;
pullRefreshBean.isRefreshing = true;
if(!isDisableLoadMore){//没有禁用加载更多
smartRefreshLayout.setEnableLoadMore(true);
}
}
}
- 初始化刷新控制类–BaseActivity
protected void initRefreshLayout(SmartRefreshLayout smartRefresh, PullRefreshBean mPullRefreshBean) {
smartRefresh.setRefreshHeader(new ClassicsHeader(this));
//设置 Footer 为 球脉冲 样式
smartRefresh.setRefreshFooter(new ClassicsFooter(this));
smartRefresh.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
mPullRefreshBean.setLoardMore(mPullRefreshBean, smartRefresh);//加载更多时的处理
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
mPullRefreshBean.setRefresh(mPullRefreshBean, smartRefresh);//下拉刷新时的处理
}
});
}
- 数据加载类DealRefreshHelper
/**
* 处理下拉刷新和上拉加载时的数据,已经处理了有无数据显示的view,加载更多时列表的刷新,下拉时列表的刷新
* @param <T>
*/
public class DealRefreshHelper<T> {
/**
*
* @param stfLayout 下拉刷新的布局,smartRefresh
* @param adapter 适配器
* @param lyViewNoData 暂无数据的view
* @param serverData 服务器返回的数据
* @param localData 本地数据
* @param pullRefreshBean 下拉刷新的页码页数控制
*/
public void dealDataToUI(@NotNull SmartRefreshLayout stfLayout, @NotNull RecyclerView.Adapter adapter, View lyViewNoData, List<T> serverData, @NotNull List<T> localData, PullRefreshBean pullRefreshBean) {
if(stfLayout == null || adapter == null || localData == null){
return;
}
stfLayout.finishLoadMore();
stfLayout.finishRefresh();
if(serverData != null){
if(serverData.size()==0){
stfLayout.setEnableLoadMore(false);
}
if(pullRefreshBean.isRefreshing){
localData.clear();
}
localData.addAll(serverData);
adapter.notifyDataSetChanged();
if(serverData.size()<pullRefreshBean.pageSize){//这次返回的数据小于pagesize,没有更多了
stfLayout.setEnableLoadMore(false);
}
} else {
if(pullRefreshBean.isLoadMoreing){
pullRefreshBean.pageIndex--;
}
}
if(localData.size() ==0){//显示无数据的view
// localData.clear();
// adapter.notifyDataSetChanged();
if(lyViewNoData != null){
lyViewNoData.setVisibility(View.VISIBLE);
}
} else {//显示有数据的view
if(lyViewNoData != null){
lyViewNoData.setVisibility(View.GONE);
}
}
pullRefreshBean.isLoadMoreing = false;
pullRefreshBean.isRefreshing = false;
}
}
- 使用
new DealRefreshHelper<Bean>().dealDataToUI(viewBinding.smartRefresh, mAdapter, lyViewNoData, list, mDataList, mPullRefreshBean);
//lyViewNoData是View 沒有数据的布局