SmartRefreshLayout的使用

第三方刷新库的使用

SmartRefreshLayout

本编将讲解SmartRefreshLayout的使用,来达成进入页面时,调用自动加载来加载数据的效果。

SmartRefreshLayout的Xml使用:
  • SmartRefreshLayout是一个父类,它只允许有一个子类被它包裹,不能有两个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/swipe"
android:layout_width="match_parent"
android:layout_height="match_parent">


<androidx.recyclerview.widget.RecyclerView
android:id="@+id/Hot_Recy"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/dp_10"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</com.scwang.smartrefresh.layout.SmartRefreshLayout>

这样就给这个页面添加了个刷新功能(包括,下拉刷新,上拉加载)

  • 接下来就是对SmartRefreshLayout的属性进行设置
    1. 推荐进行全局设置,在MyApplication里进行设置
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      public class MyApplication extends Application {
      ...
      static {//使用static代码段可以防止内存泄漏
      //设置全局默认配置(优先级最低,会被其他设置覆盖)
      SmartRefreshLayout.setDefaultRefreshInitializer(new DefaultRefreshInitializer() {
      @Override
      public void initialize(@NonNull Context context, @NonNull RefreshLayout layout) {
      //开始设置全局的基本参数(可以被下面的DefaultRefreshHeaderCreator覆盖)
      layout.setEnableLoadMore(false);
      layout.setDisableContentWhenRefresh(true);
      }
      });

      //全局设置默认的 Header
      SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
      @Override
      public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
      //开始设置全局的基本参数(这里设置的属性只跟下面的MaterialHeader绑定,其他Header不会生效,能覆盖DefaultRefreshInitializer的属性和Xml设置的属性)
      layout.setEnableHeaderTranslationContent(false);
      return new MaterialHeader(context).setColorSchemeResources(R.color.Pink,R.color.While,R.color.While);
      }
      });
      }

      @Override
      public void onCreate() {
      ...
      }
      我这里是设置了SmartRefreshLayout它的下拉刷新样式,并且取消了上拉加载,但是这里设置的属性优先级是最低的,别的页面如果进行覆写,则会被覆盖
SmartRefreshLayout的java代码使用:
  • 首先获取控件,这里因为全篇都是使用的DataBinding,所有就不用获取控件了,之后设置SmartRefreshLayout的下拉刷新监听,在监听方法里面写入你的加载数据的方法。
    1
    2
    3
    4
    5
    6
    7
    8
    binding.swipe.setOnRefreshListener(new OnRefreshListener() {

    @Override
    public void onRefresh(@NonNull RefreshLayout refreshLayout) {
    initDatas();
    isFirst = false;
    }
    });
    我这里是调用了加载数据的方法,并且将isFirst设置为false,这样是用来区分第一次加载和手动下拉加载
  • 之后还需要在onCreate中设置SmartRefreshLayout自动刷新,这样在进入avtivity/Fragment的时候就会进行自动的刷新,并调用刷新监听里设置的方法
    1
    2
    3
    4
    @Override
    protected void initData() {
    binding.swipe.autoRefresh();//自动刷新
    }
    这样基本上就完成了想要的效果。接下来就给出SmartRefreshLayout的属性。
  • SmartRefreshLayout属性:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    public class RefreshActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    //下面示例中的值等于默认值
    RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
    refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
    refreshLayout.setDragRate(0.5f);//显示下拉高度/手指真实下拉高度=阻尼效果
    refreshLayout.setReboundDuration(300);//回弹动画时长(毫秒)

    refreshLayout.setHeaderHeight(100);//Header标准高度(显示下拉高度>=标准高度 触发刷新)
    refreshLayout.setHeaderHeightPx(100);//同上-像素为单位 (V1.1.0删除)
    refreshLayout.setFooterHeight(100);//Footer标准高度(显示上拉高度>=标准高度 触发加载)
    refreshLayout.setFooterHeightPx(100);//同上-像素为单位 (V1.1.0删除)

    refreshLayout.setFooterHeaderInsetStart(0);//设置 Header 起始位置偏移量 1.0.5
    refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)
    refreshLayout.setFooterFooterInsetStart(0);//设置 Footer 起始位置偏移量 1.0.5
    refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素为单位 1.0.5 (V1.1.0删除)

    refreshLayout.setHeaderMaxDragRate(2);//最大显示下拉高度/Header标准高度
    refreshLayout.setFooterMaxDragRate(2);//最大显示下拉高度/Footer标准高度
    refreshLayout.setHeaderTriggerRate(1);//触发刷新距离 与 HeaderHeight 的比率1.0.4
    refreshLayout.setFooterTriggerRate(1);//触发加载距离 与 FooterHeight 的比率1.0.4

    refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能
    refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能
    refreshLayout.setEnableAutoLoadMore(true);//是否启用列表惯性滑动到底部时自动加载更多
    refreshLayout.setEnablePureScrollMode(false);//是否启用纯滚动模式
    refreshLayout.setEnableNestedScroll(false);//是否启用嵌套滚动
    refreshLayout.setEnableOverScrollBounce(true);//是否启用越界回弹
    refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加载完成时滚动列表显示新的内容
    refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的时候向下平移列表或者内容
    refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的时候向上平移列表或者内容
    refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不满一页时候开启上拉加载功能
    refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加载结束之后Footer跟随内容1.0.4
    refreshLayout.setEnableOverScrollDrag(false);//是否启用越界拖动(仿苹果效果)1.0.4

    refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成时滚动列表显示新的内容 1.0.5
    refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header当时样式为FixedBehind时1.0.5
    refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer当时样式为FixedBehind时1.0.5

    refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的时候禁止列表的操作
    refreshLayout.setDisableContentWhenLoading(false);//是否在加载的时候禁止列表的操作

    refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//设置多功能监听器
    refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//设置滚动边界判断
    refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定义滚动边界

    refreshLayout.setRefreshHeader(new ClassicsHeader(context));//设置Header
    refreshLayout.setRefreshFooter(new ClassicsFooter(context));//设置Footer
    refreshLayout.setRefreshContent(new View(context));//设置刷新Content(用于非xml布局代替addView)1.0.4

    refreshLayout.autoRefresh();//自动刷新
    refreshLayout.autoLoadMore();//自动加载
    refreshLayout.autoRefreshAnimationOnly();//自动刷新,只显示动画不执行刷新
    refreshLayout.autoLoadMoreAnimationOnly();//自动加载,只显示动画不执行加载
    refreshLayout.autoRefresh(400);//延迟400毫秒后自动刷新
    refreshLayout.autoLoadMore(400);//延迟400毫秒后自动加载
    refreshLayout.finishRefresh();//结束刷新
    refreshLayout.finishLoadMore();//结束加载
    refreshLayout.finishRefresh(3000);//延迟3000毫秒后结束刷新
    refreshLayout.finishLoadMore(3000);//延迟3000毫秒后结束加载
    refreshLayout.finishRefresh(false);//结束刷新(刷新失败)
    refreshLayout.finishLoadMore(false);//结束加载(加载失败)
    refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 1.0.4
    refreshLayout.closeHeaderOrFooter();//关闭正在打开状态的 Header 或者 Footer(1.1.0)
    refreshLayout.resetNoMoreData();//恢复没有更多数据的原始状态 1.0.4(1.1.0删除)
    refreshLayout.setNoMoreData(false);//恢复没有更多数据的原始状态 1.0.5

    }
    }