Android下拉刷新的实现(一) - SwipeRefreshLayout篇

Android下拉刷新的实现(一) - SwipeRefreshLayout篇

👉关于作者

已经工作三年的95后程序员,坐标上海。平时在公司写Android原生App,业务时间会抽空学习Java后端,目标是成为全栈工程师,志同道合的可以私我聊聊haha。加入CSDN快4年了,看了很多优秀作者的博客收获很多。后面的时间里,我写也会整理总结一些工作中使用到的知识分享出来。我的座右铭:人生在勤,不索何获。大家一起努力加油吧

👉正文部分

Android下拉刷新的实现系列文章准备了两篇,对应SwipeRefreshLayou和PtrFrameLayout。SwipeRefreshLayout作为Android原生的下拉刷新控件,UI效果比较简洁,也比较容易开发,但是实现的效果过于简单,对于提升页面的美观度有着局限性;PtrFrameLayout是一款下拉刷新框架,提供的UI效果比较好,复杂度也会高一点,大家可以按照自己的实际情况来进行选择

1、使用场景

当界面中的数据需要刷新时,通过下拉界面从而触发刷新,刷新开始的同时会去请求数据,等到数据请求结束关掉Loading

2、实现效果

在这里插入图片描述

3、gradle引用

implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"

4、具体使用

4.1、xml布局,将需要更新的内容布局嵌套到SwipeRefreshLayout中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".swipe_refresh_layout.SwipeRefreshLayoutDemoActivity">

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

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/swipe_refresh_layout_demo_activity"
            android:gravity="center" />

    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
4.2、代码设置

1、findViewById

SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout);

2、Loading的样式设置

//设置进度条的颜色
swipeRefreshLayout.setColorSchemeResources(R.color.green);
//设置进度条的背景颜色
swipeRefreshLayout.setProgressBackgroundColorSchemeResource(R.color.d3_bg_gray);

设置后的效果

在这里插入图片描述

3、代码中设置监听器,监听到刷新事件后开始请求数据,请求结束后关闭Loading

//设置刷新监听器
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
    public void onRefresh() {
        //开始网络请求
        String url = "...";
        final Request request = new Request.Builder().url(url).build();
    	  //开启子线程进行网络请求
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    final Response response = okHttpClient.newCall(request).execute();
                  	//请求结束后,切换到主线程处理UI
                    mainHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            //关闭刷新
                            swipeRefreshLayout.setRefreshing(false);
                            try {
                               Toast.makeText(SwipeRefreshLayoutDemoActivity.this,response.body().string(),Toast.LENGTH_LONG).show();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
});
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值