使用PullToRefresh实现下拉刷新和上拉加载

PullToRefresh是一套实现非常好的下拉刷新库,它支持:

1.ListView

2.ExpandableListView

3.GridView

4.WebView

等多种常用的需要刷新的View类型,而且使用起来也十分方便。

下拉刷新:

先看布局文件

 1 <!--  xmlns:ptr = "http://schemas.android.com/apk/res-auto"  为我们要使用PullToRefresh 里面一些属性需要引的命名空间 -->
 2 <com.handmark.pulltorefresh.library.PullToRefreshListView
 3         xmlns:ptr="http://schemas.android.com/apk/res-auto"
 4         android:id="@+id/law_lv"
 5         android:layout_width="match_parent"
 6         android:layout_height="match_parent"
 7         android:cacheColorHint="#00000000"
 8         android:divider="#ffffff"
 9         android:dividerHeight="5dp"
10         android:fadingEdge="none"
11         android:fastScrollEnabled="false"
12         android:footerDividersEnabled="false"
13         android:headerDividersEnabled="false"
14         android:listSelector="#00000000"
15         android:smoothScrollbar="true"
16         ptr:ptrHeaderBackground="#ffffff"
17         ptr:ptrHeaderTextColor="#a6a6a6" />

代码设置

 1 /**
 2          * 实现 接口  OnRefreshListener2<ListView>  以便与监听  滚动条到顶部和到底部
 3          */
 4         lawLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
 5             @Override
 6             public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) {
 7                 //Toast.makeText(getActivity(), "刷新完成", Toast.LENGTH_SHORT).show();
 8                 Snackbar.make(lawLv,"刷新完成",Snackbar.LENGTH_SHORT).show();
 9 
10             }
11             @Override
12             public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) {
13                 Toast.makeText(getActivity(), "加载完成", Toast.LENGTH_SHORT).show();
14              
15             }
16         });
17 /* 
18          * Mode.BOTH:同时支持上拉下拉 
19          * Mode.PULL_FROM_START:只支持下拉Pulling Down 
20          * Mode.PULL_FROM_END:只支持上拉Pulling Up 
21          */  
22         /* 
23          * 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。  
24          * 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。 
25          * 当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法, 
26          * Mode.PULL_FROM的时候只调用onPullUpToRefresh()方法.  
27          */  
28 设置 模式为lawLv.setMode(PullToRefreshBase.Mode.BOTH);
29 /* 
30          * setOnRefreshListener(OnRefreshListener listener):设置刷新监听器; 
31          * setOnLastItemVisibleListener(OnLastItemVisibleListener listener):设置是否到底部监听器; 
32          * setOnPullEventListener(OnPullEventListener listener);设置事件监听器; 
33          * onRefreshComplete():设置刷新完成 
34          */  
35         /* 
36          * pulltorefresh.setOnScrollListener() 
37          */  
38         // SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动      
39         // SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)      
40         // SCROLL_STATE_IDLE(0) 停止滚动         
41         /* 
42          * setOnLastItemVisibleListener 
43          * 当用户拉到底时调用   
44          */  
45         /* 
46          * setOnTouchListener是监控从点下鼠标 (可能拖动鼠标)到放开鼠标(鼠标可以换成手指)的整个过程 ,他的回调函数是onTouchEvent(MotionEvent event), 
47          * 然后通过判断event.getAction()是MotionEvent.ACTION_UP还是ACTION_DOWN还是ACTION_MOVE分别作不同行为。 
48          * setOnClickListener的监控时间只监控到手指ACTION_DOWN时发生的行为 
49          */  
50 //      // 设置下拉刷新文本  
51 //      pullToRefresh.getLoadingLayoutProxy(false, true)  
52 //              .setPullLabel("上拉刷新...");  
53 //      pullToRefresh.getLoadingLayoutProxy(false, true).setReleaseLabel(  
54 //              "放开刷新...");  
55 //      pullToRefresh.getLoadingLayoutProxy(false, true).setRefreshingLabel(  
56 //              "正在加载...");  
57 //      // 设置上拉刷新文本  
58 //      pullToRefresh.getLoadingLayoutProxy(true, false)  
59 //              .setPullLabel("下拉刷新...");  
60 //      pullToRefresh.getLoadingLayoutProxy(true, false).setReleaseLabel(  
61 //              "放开刷新...");  
62 //      pullToRefresh.getLoadingLayoutProxy(true, false).setRefreshingLabel(  
63 //              "正在加载...");  
64 刷新完后调用lawLv.onRefreshComplete();通知刷新完成
65 //bug:如果刷新时间太短 他会一直刷新
66 //解决办法:延迟一秒进行通知
67 lawLv.postDelayed(new Runnable() {
68                     @Override
69                     public void run() {
70                         Toast.makeText(getActivity(),"刷新完成",Toast.LENGTH_SHORT).show();
71                         adapter.notifyDataSetChanged();
72                         lawLv.onRefreshComplete();
73                     }
74                 },1000);
75 //立即刷新/自动刷新 方法,也要延迟一秒执行
76 lawLv.postDelayed(new Runnable() {
77 
78             @Override
79             public void run() {
80                 lawLv.setRefreshing(true);
81             }
82         }, 1000);
原文地址:https://www.cnblogs.com/yimi-yangguang/p/PullToRefresh.html