Android开发:记录两种下拉刷新的第三方控件 SwipeRefreshLayout 和 SmartRefreshLayout

 

目录

一、SwipeRefreshLayout (仅支持下拉刷新)介绍

1.1、效果图

1.2、项目中引入依赖

1.3、在xml布局中引入该控件

1.4、activity中代码实现

1.5、进阶

二、SmartRefreshLayout(支持下拉刷新和上拉加载) 介绍

2.1、效果图

2.2、项目引入依赖

2.3、在xml布局中引入该控件

2.4、activity中代码实现


 

本篇文章主要介绍两种下拉刷新库,第一种是google官方库中仅支持下拉刷新的控件--SwipeRefreshLayout;第二种是平时用的比较多且同时支持下拉刷新和上拉加载功能的控件--SmartRefreshLayout。这两种控件我更喜欢第二种,原因很简单,第二种既支持上拉加载又支持下拉刷新。所以,何乐而不为呢!

一、SwipeRefreshLayout (仅支持下拉刷新)介绍

1.1、效果图

1.2、项目中引入依赖

在app的gradle中添加如下依赖

implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"

1.3、在xml布局中引入该控件

该控件需要嵌套列表控件如:ListView 或者 RecyclerView

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipeRefreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

1.4、activity中代码实现

var swipeRefreshLayout = view.findViewById(R.id.swipeRefreshLayout)
//设置加载条显示的颜色
swipeRefreshLayout.setColorSchemeColors(
    Color.parseColor("#ff0000"),
    Color.parseColor("#00ff00"),
    Color.parseColor("#0000ff")
)
        swipeRefreshLayout.setOnRefreshListener(object : SwipeRefreshLayout.OnRefreshListener {
            override fun onRefresh() {
//                开始下拉刷新
                swipeRefreshLayout.isRefreshing = true
                
//                业务层处理,调后台接口,拉取数据
                
//                数据获取成功,关闭加载框
                Handler().postDelayed(object : Runnable {
                    override fun run() {
                        swipeRefreshLayout.isRefreshing = false
                    }
                }, 2000)
            }

        })

1.5、进阶

SwipeRefreshLayout 还提供了一些方法设置进度的样式,滑动的开始位置和结束位置等

方法名 作用
setSize(int size) 设置进度View样式的大小,只有两个值DEFAULT和LARGE
setProgressViewOffset(boolean scale, int start, int end) 设置进度View下拉的起始点和结束点,scale 是指设置是否需要放大或者缩小动画
setProgressViewEndTarget(boolean scale, int end) 设置进度View下拉的结束点,scale 是指设置是否需要放大或者缩小动画
setColorSchemeColors(@ColorInt int… colors) } 设置进度View的组合颜色,在手指上下滑时使用第一个颜色,在刷新中,会一个个颜色进行切换
setDistanceToTriggerSync(int distance) 设置触发刷新的距离
setOnChildScrollUpCallback(@Nullable OnChildScrollUpCallback callback)k 如果child是自己自定义的view,可以通过这个回调,告诉swipeRefreshLayoutchild是否

关于 SwipeRefreshLayout 的使用就简单介绍到这里,了解更多内容,请查看官方文档 https://developer.android.google.cn/jetpack/androidx/releases/swiperefreshlayout

二、SmartRefreshLayout(支持下拉刷新和上拉加载) 介绍

2.1、效果图

2.2、项目引入依赖

在app的gradle中添加如下依赖

implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//没有使用特殊Header,可以不加这行

2.3、在xml布局中引入该控件

该控件需要嵌套列表控件如:ListView 或者 RecyclerView

<com.scwang.smartrefresh.layout.SmartRefreshLayout
    android:id="@+id/refreshLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

2.4、activity中代码实现

 var refreshLayout = view.findViewById(R.id.refreshLayout)
        //设置 Header 为 贝塞尔雷达 样式
        refreshLayout.setRefreshHeader(MaterialHeader(context))
//设置 Footer 为 球脉冲 样式
        refreshLayout.setRefreshFooter(
            BallPulseFooter(context as MainActivity).setSpinnerStyle(
                SpinnerStyle.Scale
            )
        )
//        下拉刷新
        refreshLayout.setOnRefreshListener(object : OnRefreshListener {
            override fun onRefresh(refreshLayout: RefreshLayout?) {

                refreshLayout?.autoRefresh()

//             业务处理,   加载数据
//..................
//                加载数据完成后,关闭刷新
                Handler().postDelayed(object : Runnable {
                    override fun run() {
                        refreshLayout?.finishRefresh()
                    }
                }, 2000)

            }
        })

//        上拉加载更多
        refreshLayout.setOnLoadMoreListener(object : OnLoadMoreListener {
            override fun onLoadMore(refreshLayout: RefreshLayout?) {
                refreshLayout?.autoLoadMore()

                //              业务处理,  加载数据
//..................
//                加载数据完成后,关闭刷新

                Handler().postDelayed(object : Runnable {
                    override fun run() {
                        refreshLayout?.finishLoadMore()
                    }
                }, 2000)
            }
        })

关于 SmartRefreshLayout 的使用就简单介绍到这里,了解更多内容,请查看官方文档 https://github.com/scwang90/SmartRefreshLayout

 

本篇文章到这里就结束了,关注我,了解更多Android知识!

猜你喜欢

转载自blog.csdn.net/android157/article/details/109776192
今日推荐