美文网首页
SwipeRefreshLayout下拉刷新的使用

SwipeRefreshLayout下拉刷新的使用

作者: 奔跑的佩恩 | 来源:发表于2021-01-07 14:30 被阅读0次

前言

Android开发过程中,我们能有时会用到下拉刷新的功能。官方提供了一个下拉控件——SwipeRefreshLayout,为了方便使用,我封装了一个帮助类SwipeRefreshHelper,以便在使用SwipeRefreshLayout时更加快捷简便。下面就来了解下SwipeRefreshHelper的使用吧。

今天涉及内容:

  1. SwipeRefreshLayout下拉刷新库依赖
  2. SwipeRefreshLayout控件在布局中引用
  3. SwipeRefreshHelper 在 Activity 中使用
  4. 效果图和项目结构图
  5. SwipeRefreshHelper 源码

先来波效果图


1.gif

一. SwipeRefreshLayout下拉刷新库依赖

在你项目的app_module对应的build.gradle中添加如下依赖:

dependencies {
    //swiperefreshlayout
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
}

二.SwipeRefreshLayout控件在布局中引用

在你的Activity对应的布局中引入SwipeRefreshLayout控件,类似如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:pain="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:background="@color/white">

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/mSwipeRefreshLayout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/mContentLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            //ConstraintLayout布局也可以替换成其他布局,其他代码省略
            //......

        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

三.SwipeRefreshHelper 在 Activity 中使用

我将SwipeRefreshLayout的下拉刷新封装到了一个帮助类SwipeRefreshHelper中,下面给出SwipeRefreshHelperTempActivity中使用的代码:

public class TempActivity extends AppCompatActivity{

    private TextView mTvTest;
    private Button mBtnTest;
    private SwipeRefreshLayout mSwipeRefreshLayout;
    
    private SwipeRefreshHelper mSwipeRefreshHelper;
    private Timer mTimer;
    private int count;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temp);

        //初始化控件
        initView();
        //初始化数据
        initData();
        //控件监听
        setListener();
    }

    /**初始化控件**/
    private void initView(){
        mTvTest=findViewById(R.id.mTvTest);
        mBtnTest=findViewById(R.id.mBtnTest);
        mSwipeRefreshLayout=findViewById(R.id.mSwipeRefreshLayout);
    }

    private void initData(){
        mSwipeRefreshHelper=new SwipeRefreshHelper(mSwipeRefreshLayout);

        //设置下拉主题颜色(最多设置四种颜色,最少设置一种颜色)
        mSwipeRefreshHelper.setColorSchemeResources(R.color.green,R.color.red,R.color.black,R.color.blue);
//        //设置背景色(不设置时默认为白色背景)
//        mSwipeRefreshHelper.setProgressBackgroundColorSchemeResource(R.color.green);

        //初始化下拉刷新
        mSwipeRefreshHelper.initRefresh(new SwipeRefreshHelper.OnRefreshListener() {
            @Override
            public void refresh() {
                //下拉刷新的处理
                //......

                //模拟通讯流程
                startTimer();
            }
        });

        //需要一进入activity界面时进行自动刷新时调用
//        //自动刷新(需要在initRefresh方法之后调用)
//        mSwipeRefreshHelper.autoRefresh();
    }


    /**控件监听**/
    private void setListener() {
        mBtnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mSwipeRefreshHelper.isRefreshing()){
                    ToastUtil.shortShow("正在刷新");
                }else{
                    ToastUtil.shortShow("刷新完毕");
                }
            }
        });

    }

    private void startTimer(){
        mTimer=new Timer();

        mTimer.schedule(new TimerTask() {
            @Override
            public void run() {
                count++;
                if(count==8){
                    receiveHttp();
                    count=0;
                    mTimer.cancel();
                    mTimer=null;
                }else{
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            ToastUtil.shortShow("count="+count);
                        }
                    });
                }
            }
        },0,1000);
    }

    private void receiveHttp(){
        //结束刷新
        mSwipeRefreshHelper.stopRefresh();
    }

    @Override
    protected void onDestroy() {
        if(mTimer!=null){
            mTimer.cancel();
            mTimer=null;
        }
        super.onDestroy();
    }
}

四.效果图和项目结构图

效果图.gif 项目结构图.png

五.SwipeRefreshHelper 源码

下面给出 SwipeRefreshHelper 源码:

相关文章

网友评论

      本文标题:SwipeRefreshLayout下拉刷新的使用

      本文链接:https://www.haomeiwen.com/subject/wqjzoktx.html