【Android - V】之SwipeRefreshLayout的使用

SwipeRefreshLayout是Android V4、V7包中的一个控件,是Google给我们提供的一个下拉刷新的布局控件,可以轻松完成下拉刷新。

SwipeRefreshLayout的特点是其中只能有一个子控件,和ScrollView相似。

我们今天已一个例子来看看SwipeRefreshLayout这个控件的功能:使用SwipeRefreshLayout布局结合ListView完成下拉刷新,向ListView中添加新数据的功能。

首先来看一下一些关于配置的问题。SwipeRefreshLayout布局中可以设置刷新圆圈中展示的颜色,调用setColorSchemeColors()方法设置,最多可以设置4中颜色,具体的代码如下:

        // 设置刷新圆圈的颜色(最多只能有四种颜色)
        srl.setColorSchemeColors(Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW);

页面的布局代码如下:

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/srh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.v4.widget.SwipeRefreshLayout>

在JAVA代码中,通过SwipeRefreshLayout在XML文件中的ID找到这个布局控件:

srl = (SwipeRefreshLayout) findViewById(R.id.srh);

ListView适配数据的代码在这里就不多说了,总之初始时候运行的结果如下图所示:

接下来编写SwipeRefreshLayout进行下拉刷新的代码。SwipeRefreshLayout布局通过setOnRefreshListener()方法设置刷新事件,需要重写其中的onRefresh()抽象方法,在这个方法中写下拉刷新的业务代码,最后必须调用setRefreshing(false)。具体的代码如下:

        // 设置SwipeRefreshLayout的刷新事件
        srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(5000);
                            mHandler.sendEmptyMessage(1);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
        // 初始化Handler
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 1) {
                    // 在ListView中添加两条数据
                    data.add(0, "New Item......");
                    data.add(0, "New Item......");
                    adapter.setData(data);
                    adapter.notifyDataSetChanged();
                    // 取消SwipeRefreshLayout的刷新状态
                    srl.setRefreshing(false);
                }
            }
        };

在这段代码中,在刷新的时候故意停留5秒钟,然后向ListView中添加了2条新的数据,最后在Handler中调用了setRefreshing(false)方法结束了刷新。刷新过程中和刷新完毕后的状态如下图所示:

      

以上就是对SwipeRefreshLayout布局控件的基础用法的介绍,下面贴出码云上的源码,供大家参考。

DEMO地址

时间: 2024-08-09 06:35:27

【Android - V】之SwipeRefreshLayout的使用的相关文章

【Android】使用 SwipeRefreshLayout 实现下拉刷新

今天在codepath 上看到一个开源项目 [点击查看]使用到了 SwipeRefreshLayout 实现了下拉刷新,但示例并不完整,于是自己就动手写了下.之前看到郭霖的博客上也有介绍下拉刷新,不过他是纯手动实现的,代码量大,较为繁琐.[点击查看]而使用Android 提供的SwipeRefreshLayout 则大大减少了我们的工作量,当然,学会了使用SwipeRefreshLayout之后还是建议去看看怎样不借助SwipeRefreshLayout从零开始实现"下拉刷新". Sw

Android开发:SwipeRefreshLayout无法显示emptyView

在使用官方的控件SwipeRefreshLayout,发现原先的emptyView消失了,在网上搜索了许多资料,没有匹配我的答案,因为我的emptyView是用一个帮助类来实现的,后来百经挫折,终于找到了一个完美的方法了,介绍如下: 首先,更改xml的布局,在外面增加一层Framelayout,改善后的XML布局如下: <FrameLayout android:id="@+id/parent" android:layout_width="match_parent&quo

[Android实例] Android 6.0RecyclerView SwipeRefreshLayout 下拉刷新 上拉加载

这是Android 6.0的 SwipeRefreshLayout 实现下拉刷新和RecyclerView的上拉加载更多,以及添加分割线等 Android <ignore_js_op> recyclerview_swift.rar 5.05 MB, 下载次数: 145

Android全新的SwipeRefreshLayout控件教程

SwipeRefreshLayout感觉是Google在吸收了PullToRefresh-ListView,ActionBarPullToRefresh之后实现的google风格的刷新控件,那花花绿绿的穿越条,浓浓的google味. 迁移到Android studio后就必须使用AppCompat_v7 21+ ,切换了之后你就会发现一些有趣的变化,比如说这个SwipeRefreshLayout,就进化成了一个圆. 那么就来看下怎么使用SwipeRefreshLayout吧! 首先需要在布局里面

Android开发之 SwipeRefreshLayout

SwipeRefreshLayout概述 用户通过手势或者点击某个按钮实现内容视图的刷新,布局里加入SwipeRefreshLayout嵌套一个子视图如ListView.RecyclerView等,触发刷新会通过OnRefreshListener的onRefresh方法回调,我们在这里执行页面数据的刷新,每次手势的完成都会执行一次通知,根据滑动距离判断是否需要回调.setRefreshing(false)通过代码直接取消刷新,true则手动设置刷新调出刷新视图.setEnabled(false)

Android官方的SwipeRefreshLayout

这个是基于最新v4包实现的一个下拉刷新的东东--- 先给大家透露一下,整体很简单,毕竟不是自定义,还请大家放宽心对待!!!废话不多说,直接贴代码 package com.bob.swiperefresh; import android.app.Activity; import android.os.Message; import android.support.v4.widget.*; import android.os.Bundle; import android.widget.ArrayAd

【Android - V】之Toolbar的使用

Toolbar是Android V7包中的一个控件,用来代替Action Bar作为界面的头部标题栏布局.Toolbar相对于Action Bar的特点是更加灵活,可以显示在任何位置. 首先先来看Toolbar在布局文件中的代码怎么写,实际上跟其他Android原生控件一样,只需要设置宽高.背景等属性就可以了,如果有其他需求还可以设置theme等主题属性. 下面是一个Toolbar在布局文件中的代码: <RelativeLayout xmlns:android="http://schema

【Android - V】之DrawerLayout的使用

DrawerLayout是Android V4包中的一个布局控件,用来实现一个抽屉样式的布局. DrawerLayout通过设置子视图的layout_gravity来决定子视图停靠在屏幕的哪个边缘外侧,等待用户将它拖进来或点击按钮拉开抽屉. 下面是一个简单的DrawerLayout的布局文件中的代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_wi

【Android - V】之ViewPager的使用

ViewPager是Android V4包中的一个控件,常常用来作为首页的滚动广告,也常常结合Fragment来实现页面的切换效果. ViewPager和ListView有很多相似的地方,都是适配器控件,要在其中展示数据,都需要设置适配器.ViewPager的常用的适配器类有两个:PagerAdapter和FragmentPagerAdapter,分别用来展示普通的布局页面和Fragment页面.下面我们来一一介绍. 1.ViewPager加载普通页面: 当我们需要使用ViewPager加载普通