Android下拉刷新的实现(一)

时间: 2023-07-11 admin IT培训

Android下拉刷新的实现(一)

Android下拉刷新的实现(一)

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=""xmlns:app=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".swipe_refresh_layout.SwipeRefreshLayoutDemoActivity"><androidx.swiperefreshlayout.widget.SwipeRefreshLayoutandroid:id="@+id/swipe_refresh_layout"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid: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() {@Overridepublic void onRefresh() {//开始网络请求String url = "...";final Request request = new Request.Builder().url(url).build();//开启子线程进行网络请求new Thread(new Runnable() {@Overridepublic void run() {try {final Response response = okHttpClient.newCall(request).execute();//请求结束后,切换到主线程处理UImainHandler.post(new Runnable() {@Overridepublic 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();}
});