下拉刷新系列二:SmartRefreshLayout 使用总结

SmartRefreshLayout使用总结

          • 1. 概述
          • 2. 集成步骤
          • 3. SmartRefreshLayout 注意点
          • 参考

1. 概述

基础使用:Android智能下拉刷新框架-SmartRefreshLayout
GitHub地址:https://github.com/scwang90/SmartRefreshLayout
下拉刷新系列二:SmartRefreshLayout 使用总结_第1张图片

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种设置方式)

  1. 全局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);
                }
            });
    }
}
  1. 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>
  1. 代码指定
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 注意点
  1. SmartRefreshLayout 没有使用到:序列化、反序列化、JNI、反射,所以并不需要添加混淆过滤代码
  2. 常见问题,这个一定记得先看完一遍,避免集成过程中浪费不必要的时间
  3. SmartRefreshLayout自动加载更多,当数据请求完毕在调用finishLoadMore() 方法时,默认会弹出加载完成的白框,若不想弹出
// 获取Footer引用,调用该方法即可
footer.setFinishDuration(500)  
  1. 集成此下拉刷新控件,属性很多很多,需要大家静下心阅读属性文档
  2. 自定义Header和Footer
  3. SmartRefreshLayout自定义上拉刷新效果,一种偷懒的做法:将ClassicFooter里面的几个元素通过findViewById找出来进行替换实现自定义Footer的效果
  4. 列表数据请求完,展示“到底了”类似文案,需要设置一个参数:
/**
     * 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文档还有待完善。

参考
  1. Android智能下拉刷新框架-SmartRefreshLayout

你可能感兴趣的:(Android)