版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zsp_android_com/article/details/86235067
SmartRefreshLayout
属性
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);
结束加载(加载失败)
依赖
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
SmartRefreshLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:orientation="vertical">
...
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/taskStatisticsRl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/taskStatisticsRvContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</LinearLayout>
Header、Footer
- 方式一
全局设。所设Header、Footer优先级最低。同用方式二、三时被覆盖。 - 方式二
XML设Header、Footer优先级中等,同用方式三时被覆盖。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background" android:orientation="vertical"> ... <com.scwang.smartrefresh.layout.SmartRefreshLayout android:id="@+id/taskStatisticsRl" android:layout_width="match_parent" android:layout_height="match_parent"> <com.scwang.smartrefresh.layout.header.ClassicsHeader android:layout_width="match_parent" android:layout_height="wrap_content" app:srlAccentColor="@color/background" app:srlPrimaryColor="@color/viewfinder_mask" app:srlTextSizeTitle="@dimen/sp_14" /> <android.support.v7.widget.RecyclerView android:id="@+id/taskStatisticsRvContent" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" /> <com.scwang.smartrefresh.layout.footer.ClassicsFooter android:layout_width="match_parent" android:layout_height="wrap_content" app:srlAccentColor="@color/background" app:srlPrimaryColor="@color/viewfinder_mask" app:srlTextSizeTitle="@dimen/sp_14" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout> </LinearLayout>
- 方式三
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() {...});
SmartRefreshLayoutKit
package widget.refreshload;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.constant.RefreshState;
/**
* Created on 2019/1/10.
*
* @author 郑少鹏
* @desc SmartRefreshLayoutKit
*/
public class SmartRefreshLayoutKit {
/**
* 配置
*
* @param smartRefreshLayout 控件
*/
public static void config(SmartRefreshLayout smartRefreshLayout) {
// 刷新时禁列表操作
smartRefreshLayout.setDisableContentWhenRefresh(false);
// 加载时禁列表操作
smartRefreshLayout.setDisableContentWhenLoading(false);
// 内容不满一页不可上拉加载
smartRefreshLayout.setEnableLoadMoreWhenContentNotFull(false);
}
/**
* 状态改变
*
* @param smartRefreshLayout 控件
* @param refreshState 刷新状态
*/
public static void stateChangeOnError(SmartRefreshLayout smartRefreshLayout, RefreshState refreshState) {
switch (refreshState) {
case Refreshing:
// 刷新失败(不更时间)
smartRefreshLayout.finishRefresh(false);
break;
case Loading:
// 加载失败
smartRefreshLayout.finishLoadMore(false);
break;
default:
break;
}
}
/**
* 状态改变
*
* @param smartRefreshLayout 控件
* @param refreshState 刷新状态
* @param refreshOrLoadSuccess 刷新或加载成功否
* @param dataSize 数据体积
*/
public static void stateChangeOnResponse(SmartRefreshLayout smartRefreshLayout, RefreshState refreshState, boolean refreshOrLoadSuccess, int dataSize) {
switch (refreshState) {
case Refreshing:
if (refreshOrLoadSuccess) {
smartRefreshLayout.finishRefresh();
// 恢复无更多数据原始状
smartRefreshLayout.setNoMoreData(false);
} else {
// 刷新失败(不更时间)
smartRefreshLayout.finishRefresh(false);
}
break;
case Loading:
if (refreshOrLoadSuccess) {
if (dataSize > 0) {
smartRefreshLayout.finishLoadMore();
} else {
// 显全部加载完并不再触发加载事件
smartRefreshLayout.finishLoadMoreWithNoMoreData();
}
} else {
// 加载失败
smartRefreshLayout.finishLoadMore(false);
}
break;
default:
break;
}
}
}
主代码
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();
// 恢复无更多数据原始状
smartRefreshLayout.setNoMoreData(false);
} else {
// 刷新失败(不更时间)
smartRefreshLayout.finishRefresh(false);
}
break;
case Loading:
if (refreshOrLoadSuccess) {
if (dataSize > 0) {
smartRefreshLayout.finishLoadMore();
} else {
// 显全部加载完并不再触发加载事件
smartRefreshLayout.finishLoadMoreWithNoMoreData();
}
} else {
// 加载失败
smartRefreshLayout.finishLoadMore(false);
}
break;
default:
break;
}
}