在最新的  Android Support Library, revision 19.1.0 (March 2014)   添加了SwipeRefreshLayout控件。

版本发布的说明信息如下:

Changes for v4 support library:
Added the SwipeRefreshLayout class, which enables users to refresh the contents of a view with a vertical swipe gesture.
Fixed accessibility issues with navigation drawers. Changes for v7 appcompat library:
Fixed background issues with the action bar.

链接:http://developer.android.com/intl/zh-cn/tools/support-library/index.html

SwipeRefreshLayout 的官方说明地址如下:

http://developer.android.com/intl/zh-cn/reference/android/support/v4/widget/SwipeRefreshLayout.html

几点重要的说明如下:

1.  SwipeRefreshLayout 是用来做下拉刷新的,可以实现Google Now上的下拉刷新效果
2.  SwipeRefreshLayout 只能有一个直接的子view,也就是说SwipeRefreshLayout 只能直接包裹一个子view(当然这个子view可以包含多个view),

如果不满足这个条件,运行的时候会报如下的错误:

java.lang.IllegalStateException: SwipeRefreshLayout can host only one direct child
3. SwipeRefreshLayout 包裹的子view必须是可以支持下拉刷新手势的,例如ListView和ScrollView 。

使用的demo 如下 :

效果图:

核心的代码 :

package com.hsx.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener {
private SwipeRefreshLayout swipeLayout;
List<String> data = new ArrayList<String>();
MyAdapter adapter; protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData(); swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
swipeLayout.setOnRefreshListener(this);
swipeLayout.setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light,
android.R.color.holo_red_light);
ListView listView = (ListView) findViewById(R.id.test_listview);
adapter = new MyAdapter();
listView.setAdapter(adapter);
} private void initData() {
data.add("苏州");
data.add("北京");
data.add("上海");
} Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
swipeLayout.setRefreshing(false);
adapter.notifyDataSetChanged();
} }; public void onRefresh() { new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Random random = new Random();
data.add("天津" + random.nextInt(100));
handler.sendEmptyMessage(1000);
}
}).start();
} private class MyAdapter extends BaseAdapter { @Override
public int getCount() { return data.size();
} @Override
public Object getItem(int position) { return data.get(position);
} @Override
public long getItemId(int position) { return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item, null);
TextView tvItem = (TextView) convertView.findViewById(R.id.item_tv);
tvItem.setText(data.get(position));
return convertView;
}
} }

主布局文件 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ListView
android:id="@+id/test_listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white" >
</ListView>
</android.support.v4.widget.SwipeRefreshLayout> </LinearLayout>

但是该控件目前感觉尚不完整,无法真正的使用到项目中。例如这样的一个问题,可以再下拉刷新的过程中继续下拉刷新,目前还没有想到好的办法解决 。期待后续的Google优化。

demo下载地址:http://download.csdn.net/detail/abc13939746593/7131001

SwipeRefreshLayout的简要说明及使用demo的更多相关文章

  1. 使用/dev/uinput的简要介绍(含demo程序)【转】

    转自:https://blog.csdn.net/zhongkunjia/article/details/75142699 uinput机制有2个很大的优点: 1) 不用自己写驱动(比如弄个红外遥控器 ...

  2. Electron入门Demo之桌面应用计算器笔记(二)

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 在之前总结了一篇自学笔记,通过之前学习到的方法和知识,完成了 ...

  3. Android移动后端服务(BAAS)快速搭建后台服务器之Bmob-android学习之旅(75)

    个人移动开发者的最头疼的问题,就是App的网络后台,包含数据库等,国外目前有比较成熟的解决方案,但是限制于墙的问题,推荐国内的解决方案,比较出名的是Bmob和AVOS cloud和Atom等,这一次我 ...

  4. Android Bundle详解

    http://blog.csdn.net/cswhale/article/details/39053411 1 Bundle介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键 ...

  5. .Net Core应用框架Util介绍(三)

    上篇介绍了Util的开发环境,并让你把Demo运行起来.本文将介绍该Demo的前端Angular运行机制以及目录结构. 目录结构 在VS上打开Util Demo,会看见如下的目录结构. 现代前端通常采 ...

  6. Android——Android Bundle详解(转)

    Android Bundle详解 1 Bundle介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的. 我们经常使用Bundle在Activity之间传递数 ...

  7. 《基于Node.js实现简易聊天室系列之项目前期工作》

    前期工作主要包括:项目的创建,web服务器的创建和数据库的连接. 项目创建 网上关于Node.js项目的创建的教程有很多,这里不必赘述.Demo所使用的Node.js的框架是express,版本为4. ...

  8. 【DIOCP-DEMO说明】所有演示DEMO的简要说明

    samples目录下面为自带的DEMO 发现有很多朋友不知道如何开始DIOCP,下面是DEMO的简单说明,希望对大家有用 C#\Simple   用C#写的一个简单的回传测试,服务端开启ECHO服务器 ...

  9. 简单的下拉刷新以及优化--SwipeRefreshLayout

    代码工程简要说明:以一个SwipeRefreshLayout包裹ListView,SwipeRefreshLayout接管ListView的下拉事件,若ListView被用户触发下拉动作后,Swipe ...

随机推荐

  1. PHP之list()函数讲解

    定义和用法 list() 函数用数组中的元素为一组变量赋值. 注意,与 array() 类似,list() 实际上是一种语言结构,不是函数. 语法 list(var1,var2...) 参数 描述 v ...

  2. win8 ubuntu

    点进去看到几点注意: 1. 如果Windows是UEFI方式安装的,那Ubuntu必须也用UEFI方式安装 2. 必须用64位的Ubuntu安装文件,32位的不能探测EFI 3. 必须用UEFI的方式 ...

  3. Rsyslog配置

    http://blog.itpub.net/30015039/viewspace-1457009/

  4. 匿名用户访问sharepoint2010中的列表

    Allow anonymous users to access listitems on a publishing site in SharePoint 2010 https://knowledge. ...

  5. [转] 软件定义网络(SDN) 的应运而生

    原文见51CTO:http://network.51cto.com/art/201103/251425.htm 2012的故事 2012年的某天,你跟往常一样起床,打开电脑,却发现无法登录到邮箱.无法 ...

  6. 李洪强iOS开发之OC[012] -类的声明实现小结

    // //  main.m //  11 - 内容总结 // //  Created by vic fan on 16/7/9. //  Copyright © 2016年 李洪强. All righ ...

  7. *[hackerrank]Volleyball Match

    https://www.hackerrank.com/contests/w1/challenges/volleyball-match 此题不错,首先可以看出是DP,S(x, y)= S(x - 1, ...

  8. LR_问题_无法使用LR的Controller,提示缺少license

    问题描述 无法使用LR的Controller,提示缺少license 问题解决 使用开始->所有程序->HP LoadRunner->loadrunner,在打开界面的左上角选择co ...

  9. Hibernate逍遥游记-第10章 映射继承关系-003继承关系树中的每个类对应一个表(joined-subclass)

    1. 2. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...

  10. YUV到RGB的转换

    以下内容来源于网络,下面三个链接里的内容是比较好的,感谢博主的分享. http://blog.csdn.net/housisong/article/details/1859084 http://blo ...