app:srlEnablePreviewInEditMode="true"
编辑模式预览效果否(默true)
于SmartRefreshLayout中,Header、Footer中无效
app:srlAccentColor="@color/background"
强调色
app:srlPrimaryColor="@color/viewfinder_mask"
主题色
SmartRefreshLayout、Header、Footer均可,但Header、Footer会覆盖SmartRefreshLayout
app:srlTextSizeTitle="@dimen/sp_14"
标题文字大小(默16sp)
app:srlTextSizeTitle="@dimen/sp_12"
时间文字大小(默12sp)
refreshLayout.autoRefresh();
自动刷新
refreshLayout.finishRefresh();
刷新完成
refreshLayout.finishRefresh(int delayed);
刷新完成(参数delayed延时)
refreshLayout.finishLoadMore();
加载完成
refreshLayout.finishLoadMore(int delayed);
加载完成(参数delayed延时)
refreshLayout.finishRefresh(false);
结束刷新(刷新失败)
refreshLayout.finishLoadMore(false);
结束加载(加载失败)
刷状随版本迭代越来越多,仅isRefreshing()、isLoading()无法满足。1.0.5后开放内部State并于1.0.5标记isRefreshing()、isLoading()过期(1.1.0删该两API,getState代替,比前两法更有用)。
refreshLayout.getState() == RefreshState.None
空闲
refreshLayout.getState() == RefreshState.Loading
代替isLoading
refreshLayout.getState() == RefreshState.Refreshing
代替isRefreshing
refreshLayout.getState().isDragging
正拖拽刷新控件否(非拖拽列表)
refreshLayout.getState().isFinishing
动画正结束否
refreshLayout.getState().isHeader
当前于Header一系列状中否
refreshLayout.getState().isFooter
当前于Footer一系列状中否
refreshLayout.getState().isOpening
等同isLoading || isRefreshing
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
...
...
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
// Header为贝塞尔雷达样式
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
// Footer为球脉冲样式
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
刷新
taskStatisticsRl.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshLayout) {
}
});
加载
taskStatisticsRl.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshlayout) {
}
});
刷新加载
taskStatisticsRl.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshLayout) {
}
@Override
public void onRefresh(RefreshLayout refreshLayout) {
}
});
多功能
taskStatisticsRl.setOnMultiPurposeListener(new OnMultiPurposeListener() {...});
package widget.smartrefresh;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import java.util.List;
import static com.scwang.smartrefresh.layout.constant.RefreshState.Loading;
import static com.scwang.smartrefresh.layout.constant.RefreshState.Refreshing;
/**
* Created on 2019/1/10.
*
* @author 郑少鹏
* @desc SmartRefreshLayoutKit
*/
public class SmartRefreshLayoutKit {
private SmartRefreshLayout smartRefreshLayout;
/**
* constructor
*
* @param smartRefreshLayout 控件
*/
public SmartRefreshLayoutKit(SmartRefreshLayout smartRefreshLayout) {
this.smartRefreshLayout = smartRefreshLayout;
}
/**
* 配置
*/
public void config() {
// 刷时禁列表操作
smartRefreshLayout.setDisableContentWhenRefresh(false);
// 加时禁列表操作
smartRefreshLayout.setDisableContentWhenLoading(false);
// 内容不满一页不可上拉加
smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(false);
}
/**
* 加载
*
* @return 加载否
*/
public boolean load() {
return smartRefreshLayout.getState() == Loading;
}
/**
* 状变
*/
public void stateChangeOnError() {
switch (smartRefreshLayout.getState()) {
case Refreshing:
// 刷失败(不更时间)
smartRefreshLayout.finishRefresh(false);
break;
case Loading:
// 加失败
smartRefreshLayout.finishLoadMore(false);
break;
default:
break;
}
}
/**
* 状变
*
* @param refreshOrLoadSuccess 刷或加成否
* @param dataSize 数据体积
*/
public void stateChangeOnResponse(boolean refreshOrLoadSuccess, int dataSize) {
switch (smartRefreshLayout.getState()) {
case Refreshing:
if (refreshOrLoadSuccess) {
smartRefreshLayout.finishRefresh();
} else {
// 刷失败(不更时间)
smartRefreshLayout.finishRefresh(false);
}
break;
case Loading:
if (refreshOrLoadSuccess) {
if (dataSize > 0) {
smartRefreshLayout.finishLoadMore();
} else {
// 显全部加完并不再触发加事件
smartRefreshLayout.finishLoadMoreWithNoMoreData();
}
} else {
// 加失败
smartRefreshLayout.finishLoadMore(false);
}
break;
default:
break;
}
}
/**
* 刷时集合处理
*
* @param list 集合
*/
public void collectionProcessOnRefresh(List>... list) {
if (smartRefreshLayout.getState() == Refreshing) {
for (List> l : list) {
l.clear();
}
}
}
}
OkHttpUtils
.get()
.addHeader("token", ...)
.url(...)
.tag(this)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
SmartRefreshLayoutKit.stateChangeOnError(taskStatisticsRl, taskStatisticsRl.getState());
}
@Override
public void onResponse(String response, int id) {
if (InterfaceResponseCode.flag(response)) {
...
} else {
...
}
SmartRefreshLayoutKit.stateChangeOnResponse(taskStatisticsRl, taskStatisticsRl.getState(), InterfaceResponseCode.flag(response), listBeanResult.size());
}
});
...
显全部加载完并不再触发加载事件。
/**
* 状态改变
*
* @param smartRefreshLayout 控件
* @param refreshState 刷新状态
* @param refreshOrLoadSuccess 刷新或加载成功否
* @param dataSize 数据体积
*/
public static void stateChange(SmartRefreshLayout smartRefreshLayout, RefreshState refreshState, boolean refreshOrLoadSuccess, int dataSize) {
switch (refreshState) {
case Refreshing:
if (refreshOrLoadSuccess) {
smartRefreshLayout.finishRefresh();
} else {
// 刷新失败(不更时间)
smartRefreshLayout.finishRefresh(false);
}
break;
case Loading:
if (refreshOrLoadSuccess) {
if (dataSize > 0) {
smartRefreshLayout.finishLoadMore();
} else {
// 显全部加载完并不再触发加载事件
smartRefreshLayout.finishLoadMoreWithNoMoreData();
}
} else {
// 加载失败
smartRefreshLayout.finishLoadMore(false);
}
break;
default:
break;
}
}
调finishLoadMore()默弹加载完成白框。不弹:
footer.setFinishDuration(0);