Recyclerview的使用(三):SwipeRefreshL

2021-07-01  本文已影响0人  静水红阳

前言

SwipeRefreshLayout是Google推出的可以实现下拉刷新的控件。

Recyclerview的使用其他的文章:
RecyclerView的使用(二):添加头部和尾部
RecyclerView的使用(一):基本使用

一、包引入

首先需要在build.gradle模块中引入此包

    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0'

二、方法说明

SwipeRefreshLayout常用的方法包括如下几项:

方法 说明
setColorSchemeColors 设置下拉进度条的颜色
setProgressBackgroundColorSchemeColor 设置下拉进度条背景颜色
setRefreshing 设置刷新状态
isRefreshing 获取刷新状态,boolean
setOnRefreshListener 设置下拉操作监听

三、Demo实现

下面我们实现一个简单的demo来进行说明,当我点击按钮去添加了列表item,使用下拉刷新更新列表,效果如图:

下拉刷新Demo.gif

首先我们来看xml布局实现,直接使用SwipeRefreshLayout将Recyclerview包裹起来,设置一个用来添加item的按钮,如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".pullrefreash.PullRefreshActivity">

    <Button
        android:text="添加数据"
        android:id="@+id/btn_add_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

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

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

</LinearLayout>

demo里Recyclerview的实现比较简单,在此就不再赘述了,本片文章着重于说明下拉刷新控件,需要学习的朋友请查看我之前的Recyclerview的基本使用文章。

按照上述表格中的常用方法一一设置,完成对下拉刷新控件的设置,直接上代码:

    private fun initRecyclerView() {
        listData.add(TestData("测试1", "测试数据1"))
        listData.add(TestData("测试2", "测试数据2"))
        listData.add(TestData("测试3", "测试数据3"))

        listAdapter = TestAdapter(listData)
        listView.adapter = listAdapter
        listView.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
        listView.layoutManager = LinearLayoutManager(this)
        //设置进度条颜色
        refreshLayout.setColorSchemeColors(resources.getColor(R.color.black))
        //设置进度条背景颜色
        refreshLayout.setProgressBackgroundColorSchemeColor(resources.getColor(R.color.teal_200))
        //设置下拉动作监听
        refreshLayout.setOnRefreshListener {
            //刷新数据
            listAdapter.notifyDataSetChanged()
            Handler(Looper.getMainLooper()).postDelayed({
                //更新刷新状态
                refreshLayout.isRefreshing = false
            }, 2000)
        }
    }

在下拉动作监听中,首先在下拉刷新动作产生之后执行列表刷新代码,然后在刷新完成后更新刷新状态为完成的状态(上述代码中为了简单起见,直接使用了固定的2s延迟更新进度条状态)。

总结

利用SwipeRefreshLayout实现Recyclerview的简易下拉刷新,Demo演示。

上一篇下一篇

猜你喜欢

热点阅读