• 使用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);
  • 相关阅读:
    Linux内核分析期中总结
    Linux内核分析期末总结
    《Linux内核设计与实现》第四章读书笔记
    《Linux内核分析》第八周 进程的切换和系统的一般执行过程
    《深入理解计算机系统》第七章读书笔记
    《Linux内核设计与实现》第三章读书笔记
    "Linux内核分析"第七周
    "Linux内核分析"第六周实验报告
    “Linux内核分析”第五周报告
    Linux实验四报告
  • 原文地址:https://www.cnblogs.com/yimi-yangguang/p/PullToRefresh.html
Copyright © 2020-2023  润新知