这是一个可自定义,多功能,多选择,多神奇的下拉刷新,上拉加载的控件
刷新加载的动图效果,源码地址 https://github.com/scwang90/SmartRefreshLayout
转自:https://www.jianshu.com/p/09a763213817
build.gradle 中添加依赖
或者直接下载源代码导入类库'refresh-layout','refresh-header','refresh-footer'
//1.1.0 API改动过大,老用户升级需谨慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)
//1.0.5 当1.1.0出现问题可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)
compile 'com.android.support:design:25.3.1'//版本随意(非必须,引用可以解决无法预览问题)
Application中全局设置Header 和 Footer
public class App extends Application {
//static 代码段可以防止内存泄露
static {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定为经典Footer,默认是 BallPulseFooter
return new ClassicsFooter(context).setDrawableSize(20);
}
});
}
}
[图片上传失败...(image-a16087-1565683359804)]
在XML布局文件中添加 SmartRefreshLayout
java代码中的使用
SmartRefreshLayout refreshLayout = view.findViewById(R.id.refreshLayout);
//刷新的监听事件
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
//请求数据
refreshLayout.finishRefresh(); //刷新完成
}
});
//加载的监听事件
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
refreshLayout.finishLoadMore(); //加载完成
refreshLayout.finishLoadMoreWithNoMoreData(); //全部加载完成,没有数据了调用此方法
}
});
常用的用法
refreshLayout.autoRefresh();
//自动刷新
refreshLayout.autoLoadMore();
//自动加载更多
刷新完成和加载完成分为如下几种情况
refreshLayout.finishRefresh();
//刷新完成
refreshLayout.finishRefresh(int delayed);
//刷新完成, 参数delayed 设置延时
refreshLayout.finishLoadMore();
//加载完成
refreshLayout.finishLoadMore(int delayed);
//加载完成, 参数delayed 设置延时
这两个方法是在加载失败时调用的
refreshLayout.finishRefresh(false);
//结束刷新(刷新失败)
refreshLayout.finishLoadMore(false);
//结束加载(加载失败)
refreshLayout.finishLoadMoreWithNoMoreData();
//全部加载完成,没有数据了调用此方法
隐藏刷新加载的方法
refreshLayout.setEnableLoadMore(false);
//隐藏加载,不使用底部加载
refreshLayout.setEnableRefresh(false);
//不使用刷新,隐藏刷新
refreshLayout.setNoMoreData(false);
//恢复没有更多数据的原始状态,版本 1.0.5
SmartRefreshLayout中的属性讲解
设置SmartRefreshLayout中自带酷炫的刷新头
不会放动图,实在抱歉,放个截屏凑合一下吧,截图来自smartREfreshLayout的github上
只是把com.scwang.smartrefresh.header.DropBoxHeader换成了com.scwang.smartrefresh.header.DeliveryHeader
截图直接看效果吧,虽说不是动图,意思一下
贝塞尔雷达是在刷新包中 com.scwang.smartrefresh.layout.header.BezierRadarHeader