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

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

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

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

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

  页面的布局代码如下:

  1. <android.support.v4.widget.SwipeRefreshLayout
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/srh"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6.  
  7. <ListView
  8. android:id="@+id/lv"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent" />
  11.  
  12. </android.support.v4.widget.SwipeRefreshLayout>

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

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

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

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

  1. // 设置SwipeRefreshLayout的刷新事件
  2. srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  3. @Override
  4. public void onRefresh() {
  5. new Thread(new Runnable() {
  6. @Override
  7. public void run() {
  8. try {
  9. Thread.sleep(5000);
  10. mHandler.sendEmptyMessage(1);
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }).start();
  16. }
  17. });
  18. // 初始化Handler
  19. mHandler = new Handler() {
  20. @Override
  21. public void handleMessage(Message msg) {
  22. if (msg.what == 1) {
  23. // 在ListView中添加两条数据
  24. data.add(0, "New Item......");
  25. data.add(0, "New Item......");
  26. adapter.setData(data);
  27. adapter.notifyDataSetChanged();
  28. // 取消SwipeRefreshLayout的刷新状态
  29. srl.setRefreshing(false);
  30. }
  31. }
  32. };

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

      

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

DEMO地址

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

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

    今天在codepath 上看到一个开源项目 [点击查看]使用到了 SwipeRefreshLayout 实现了下拉刷新,但演示样例并不完整,于是自己就动手写了下.之前看到郭霖的博客上也有介绍下拉刷新, ...

  2. Android:ScrollView和SwipeRefreshLayout高度测量

    今天组里的同事要做一个奇葩的效果,要求在ScrollView里嵌套一个RefreshLayout.类似代码如下: <?xml version="1.0" encoding=& ...

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

    这是Android 6.0的 SwipeRefreshLayout 实现下拉刷新和RecyclerView的上拉加载更多,以及添加分割线等 Android <ignore_js_op> r ...

  4. 【Android - V】之ViewPager的使用

    ViewPager是Android V4包中的一个控件,常常用来作为首页的滚动广告,也常常结合Fragment来实现页面的切换效果. ViewPager和ListView有很多相似的地方,都是适配器控 ...

  5. 【Android - V】之DrawerLayout的使用

    DrawerLayout是Android V4包中的一个布局控件,用来实现一个抽屉样式的布局. DrawerLayout通过设置子视图的layout_gravity来决定子视图停靠在屏幕的哪个边缘外侧 ...

  6. 【Android - V】之Toolbar的使用

    Toolbar是Android V7包中的一个控件,用来代替Action Bar作为界面的头部标题栏布局.Toolbar相对于Action Bar的特点是更加灵活,可以显示在任何位置. 首先先来看To ...

  7. android SwipeRefreshLayout google官方下拉刷新控件

    下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...

  8. Android下拉刷新-SwipeRefreshLayout,RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout)

    SwipeRefrshLayout是Google官方更新的一个Widget,可以实现下拉刷新的效果.该控件集成自ViewGroup在support-v4兼容包下,不过我们需要升级supportlibr ...

  9. Xamarin android SwipeRefreshLayout入门实例

    android SwipeRefreshLayout 是实现的效果就是上滑下拉刷新ListView 获取其他控件数据.基本上每个App都有这种效果.Google提供了一个官方的刷新控件SwipeRef ...

随机推荐

  1. jQuery EasyUI 1.4.4 Combobox无法检索中文输入的问题

    在项目里使用了EasyUI的Combobox,当ComboBox的item是英文时,都能正常检索出对应项,但是如果使用中文输入法输入几个字母然后通过按shift键输入时,奇怪的事情发生了,combob ...

  2. 配置并学习微信JS-SDK(1)

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 微信JS-SDK ...

  3. HTTP 无法注册 URL http://+:80/Temporary_Listen_Addresses/92819ef8-81ea-4bd9-

    今天在练习wcf时,客户端调用服务端方法时出现异常.如下: 未处理System.ServiceModel.AddressAlreadyInUseException Message="HTTP ...

  4. 练习2 J题 - 多项式求和

      Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description 多项式 ...

  5. Ubuntu系统启动错误问题的解决

    一.hub_port_status failed (err=-110) 1.问题产生的原因 笔者不知道出现这种错误是不是都是相同的原因,但是我的系统出现这种原因是由于: 1.更改了虚拟硬盘的大小和/e ...

  6. C# mvc 验证码3

    //// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长 ...

  7. liveReload

    依赖条件: 1.安装liveReload浏览器插件: http://livereload.com/extensions/ chrome可以直接去在线商店安装liveReload. P.S.也可以贴代码 ...

  8. nutch 采集效率问题

    http://hi.baidu.com/jacklin/item/a8fbccf479f6a1d042c36a7c再附一篇:http://blog.csdn.net/laigood/article/d ...

  9. C#转义字符总结

    转义字符 \·一种特殊的字符常量:·以反斜线"\"开头,后跟一个或几个字符.·具有特定的含义,不同于字符原有的意义,故称“转义”字符.·主要用来表示那些用一般字符不便于表示的控制代 ...

  10. Java传递程序员变量

            解决方案虽然简单,不过若是想不起来就麻烦啦,好方法往往简单.         1.如何在一个java文件叫A里用另一个java文件叫B的方法叫method()?             ...