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);