SmartRefreshLayout使用总结
1. 概述
基础使用:Android智能下拉刷新框架-SmartRefreshLayout
GitHub地址:https://github.com/scwang90/SmartRefreshLayout
2. 集成步骤
2.1 在 build.gradle 中添加依赖
// 版本 23以上(必须)
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-21'
// 没有使用特殊Header,可以不加这行
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-21'
2.2 在XML布局文件中添加 SmartRefreshLayout(伪代码)
<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
......">
<android.support.v7.widget.RecyclerView
...... />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
2.3 在 Activity 或者 Fragment 中添加代码
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
// 开始刷新时调用
}
});
refreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
// 开始加载更多一页时调用
// 加载完毕后调用
refreshLayout.finishLoadMore();
}
});
2.4 使用指定的 Header 和 Footer (3种设置方式)
- 全局Application设置
public class App extends Application {
// static 代码段可以防止内存泄露
static {
// 设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色
return new ClassicsHeader(context).setSpinnerStyle(SpinnerStyle.Translate);//指定为经典Header,默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreater(new DefaultRefreshFooterCreater() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定为经典Footer,默认是 BallPulseFooter
return new ClassicsFooter(context).setSpinnerStyle(SpinnerStyle.Translate);
}
});
}
}
- XML布局文件指定
<com.scwang.smartrefresh.layout.SmartRefreshLayout
......>
<!--srlAccentColor srlPrimaryColor 将会改变 Header 和 Footer 的主题颜色-->
<!--srlEnablePreviewInEditMode 可以开启和关闭预览功能-->
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
....../>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
- 代码指定
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.smartLayout);
//设置 Header 为 Material风格
refreshLayout.setRefreshHeader(new MaterialHeader(this).setShowBezierWave(true));
//设置 Footer 为 球脉冲
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
3. SmartRefreshLayout 注意点
- SmartRefreshLayout 没有使用到:序列化、反序列化、JNI、反射,所以并不需要添加混淆过滤代码
- 常见问题,这个一定记得先看完一遍,避免集成过程中浪费不必要的时间
- SmartRefreshLayout自动加载更多,当数据请求完毕在调用finishLoadMore() 方法时,默认会弹出加载完成的白框,若不想弹出
// 获取Footer引用,调用该方法即可
footer.setFinishDuration(500)
- 集成此下拉刷新控件,属性很多很多,需要大家静下心阅读属性文档
- 自定义Header和Footer
- SmartRefreshLayout自定义上拉刷新效果,一种偷懒的做法:将ClassicFooter里面的几个元素通过findViewById找出来进行替换实现自定义Footer的效果
- 列表数据请求完,展示“到底了”类似文案,需要设置一个参数:
/**
* Set whether or not Footer follows the content after there is no more data.
* 设置是否在没有更多数据之后 Footer 跟随内容
* @param enabled 是否启用
* @return RefreshLayout
*/
@Override
public RefreshLayout setEnableFooterFollowWhenNoMoreData(boolean enabled) {
this.mEnableFooterFollowWhenNoMoreData = enabled;
return this;
}
PS:
前面自己有写过一篇总结第三方下拉刷新库的文章:下拉刷新系列一:Android 框架 下拉刷新,个人感觉SmartRefreshLayout的API文档还有待完善。