一、效果演示

 

    ListView实现下拉刷新,是很常见的功能。下面是一个模拟的效果,如下图:

 

                                  

                                  

 

      效果说明:当往下拉ListView的时候,顶部就会有一个“下拉刷新”的标识被拉 出来,再往下拉的时候,标识就会变成”松开刷新“,期间还伴随一个箭头的变化。此时松开手指,则会变成进度条提示正在刷新,刷新完成后,则加载进来刷新的数据。如此反复,就是下拉刷新的功能。

 

二、准备Demo

      其实本质上,ListView实现下拉刷新和实现分页加载都是一样的,都是一个自定义的ListView而已。甚至可以说,原理基本相同,只不过下拉刷新头布局变化相对分页加载复杂一点。

      因此,我们仍旧使用《listView实现分页加载》里面的Demo,即首先搭建一个正常下的ListView,准备点模拟的数据。可以点击下面的链接,查看Demo的编写:

http://www.cnblogs.com/fuly550871915/p/4866929.html

 

三、实现头布局

      好了,模拟的东西都准备完成了。下面我们首先编写头布局。比较简单,就是一个箭头,进度条好文本而已。命名为header.xml。代码如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" 
 6     android:gravity="center">
 7     
 8     <ProgressBar 
 9         android:id="@+id/progress_bar"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:visibility="gone"
13         style="?android:attr/progressBarStyleSmall"/>
14     <ImageView 
15          android:id="@+id/img_arrow"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:src="@drawable/down_arrow"/>
19     <TextView 
20         android:id="@+id/textinfo"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:paddingLeft="5dp"
24         android:textSize="20dp"
25         android:text="下拉刷新"/>
26     
27 
28 </LinearLayout>

      然后,我们就开始自定义ListView吧。新建类MyListView,继承自ListView。在这里加上头布局即可。代码如下:

 1 package com.fuly.load;
 2 
 3 import android.content.Context;
 4 import android.util.AttributeSet;
 5 import android.view.LayoutInflater;
 6 import android.view.View;
 7 import android.widget.ListView;
 8 
 9 public class MyListView extends ListView{
10     
11     private View header;//头布局
12 
13     //三个构造方法都要重写
14     public MyListView(Context context) {
15         super(context);
16         initView( context);
17         
18     }
19     public MyListView(Context context, AttributeSet attrs) {
20         super(context, attrs);
21         initView( context);
22         
23     }
24     public MyListView(Context context, AttributeSet attrs, int defStyle) {
25         super(context, attrs, defStyle);
26         initView( context);
27     
28     }
29     
30     public void initView(Context context){
31         
32         header = LayoutInflater.from(context).inflate(R.layout.header, null);
33         
34         //将头布局加进去
35         this.addHeaderView(header);
36     }
37 
38 }

      自定义的ListView已经准备好了,下面就替换吧。修改activity_main.xml里的代码即可,如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5      android:background="#ccffff">
 6      
 7     <com.fuly.load.MyListView
 8         android:id= "@+id/list_view"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:dividerHeight="5dp"
12         android:divider="#00cc00"></com.fuly.load.MyListView>
13 </LinearLayout>

 

      至此,我们已经把带头布局的ListView做好了。运行一下程序,会发现就是效果图的第一张。

      那么,怎么来隐藏头布局呢?这并不简单,是下一节要详细说的内容。

 

posted on 2015-10-10 15:28  fuly  阅读(1658)  评论(0编辑  收藏  举报