Google原生下拉刷新控件 SwipeRefreshLayout

SwipeRefrshLayoutGoogle官方更新的一个Widget,可以实现下拉刷新的效果。该控件集成自ViewGroup在support-v4兼容包下,不过我们需要升级supportlibrary的版本到19.1以上。基本使用的方法如下:

  • setOnRefreshListener(OnRefreshListener):添加下拉刷新监听器
  • setRefreshing(boolean):显示或者隐藏刷新进度条
  • isRefreshing():检查是否处于刷新状态
  • setColorSchemeResources():设置进度条的颜色主题,最多设置四种,以前的setColorScheme()方法已经弃用了。
实例一:
[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class SwipeActivity extends AppCompatActivity {  
  2.     @ViewInject(value = R.id.swipe_lv)  
  3.     private ListView mLv;  
  4.     @ViewInject(value = R.id.swipeLayoout)  
  5.     private SwipeRefreshLayout swipeLayout;  
  6.   
  7.     private LinkedList<String> list ;  
  8.     private ArrayAdapter<String>adapter;  
  9.   
  10.     Handler handler = new Handler(){  
  11.         @Override  
  12.         public void handleMessage(Message msg) {  
  13.             adapter.notifyDataSetChanged();  
  14.             swipeLayout.setRefreshing(false);  
  15.         }  
  16.     };  
  17.   
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_swipe);  
  22.         x.view().inject(this);  
  23.   
  24.         list = new LinkedList<>(Arrays.asList("java","php","oc","c#","c++","ruby","html5"));  
  25.         adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);  
  26.         mLv.setAdapter(adapter);  
  27.   
  28.         swipeLayout.setColorSchemeColors(Color.RED,Color.BLUE,Color.GREEN,Color.YELLOW);  
  29.         swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {  
  30.             @Override  
  31.             public void onRefresh() {  
  32.                 String[]datas = {"ios","vr","ar","javascrip","ui","android"};  
  33.                 for (int i = datas.length-1; i >=0; i--) {  
  34.                     list.addFirst(datas[i]);  
  35.                 }  
  36.                 handler.sendEmptyMessageDelayed(1,5000);  
  37.             }  
  38.         });  
  39.     }  
  40. }  
[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <android.support.v4.widget.SwipeRefreshLayout  
  2.         android:id="@+id/swipeLayoout"  
  3.         android:layout_height="match_parent"  
  4.         android:layout_width="match_parent">  
  5.         <ListView  
  6.             android:id="@+id/swipe_lv"  
  7.             android:layout_width="match_parent"  
  8.             android:layout_height="match_parent"></ListView>  
  9.     </android.support.v4.widget.SwipeRefreshLayout>  

效果:

实例二:

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class RefreshLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener{  
  2.   
  3.     private ListView lv;    //声明内部包含的listview  
  4.   
  5.     private View footerView;  
  6.    //判断是否正在加载当中  
  7.     private boolean isLoading = false;  
  8.     boolean isLast = false;  
  9.   
  10.     private OnLoadingListener listener;  
  11.   
  12.     //设置加载状态的方法  
  13.     public void setLoading(boolean isLoading){  
  14.         this.isLoading = isLoading;  
  15.         if (isLoading){  
  16.             lv.addFooterView(footerView);  
  17.         }else {  
  18.             lv.removeFooterView(footerView);  
  19.         }  
  20.     }  
  21.   
  22.     public void setOnLoadingListener(OnLoadingListener listener){  
  23.         this.listener = listener;  
  24.     }  
  25.     public RefreshLayout(Context context) {  
  26.         super(context);  
  27.         footerView = LayoutInflater.from(context).inflate(R.layout.lv_footer,null);  
  28.     }  
  29.   
  30.     public RefreshLayout(Context context, AttributeSet attrs) {  
  31.         super(context, attrs);  
  32.         footerView = LayoutInflater.from(context).inflate(R.layout.lv_footer,null);  
  33.     }  
  34.   
  35.     /** 
  36.      * 作用:排列布局当中的子视图  ,能够拿到子视图控件 
  37.      * */  
  38.     @Override  
  39.     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {  
  40.         super.onLayout(changed, left, top, right, bottom);  
  41.         //获取容器当中子视图的数量  
  42.         int count = getChildCount();  
  43.         if (count>0) {  //布局当中是由内容的  
  44.             for (int i = 0; i < count; i++) {  
  45.                 View childView = getChildAt(i);  
  46.                 if (childView instanceof  ListView){  
  47.                     lv = (ListView) childView;  
  48.                     lv.setOnScrollListener(this);  
  49.                 }  
  50.             }  
  51.         }  
  52.     }  
  53.   
  54.     @Override  
  55.     public void onScrollStateChanged(AbsListView view, int scrollState) {  
  56.         if (isLast & scrollState == SCROLL_STATE_IDLE && !isLoading){  
  57.             setLoading(true);  
  58.             listener.onLoad();  
  59.   
  60.         }  
  61.     }  
  62.   
  63.     @Override  
  64.     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  
  65.         //判断是否已经到底部了  
  66.         isLast = firstVisibleItem+visibleItemCount==totalItemCount;  
  67.     }  
  68.   
  69.     //定义一个上啦加载的接口  
  70.     public interface  OnLoadingListener{  
  71.         public void onLoad();  
  72.     }  
  73. }  


[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. public class RefreshActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener,RefreshLayout.OnLoadingListener{  
  2.   
  3.     @ViewInject(value = R.id.refresh_layout)  
  4.     private RefreshLayout refreshLayout;  
  5.     @ViewInject(value = R.id.refresh_lv)  
  6.     private ListView lv;  
  7.   
  8.     private List<String>mDatas;  
  9.     private ArrayAdapter<String>adapter;  
  10.     Handler handler = new Handler();  
  11.   
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_refresh);  
  16.         x.view().inject(this);  
  17.   
  18.         mDatas = new ArrayList<>();  
  19.         adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mDatas);  
  20.         lv.setAdapter(adapter);  
  21.         initData();  
  22.   
  23.         //设置上啦加载和下拉刷新的监听  
  24.         refreshLayout.setOnRefreshListener(this);  
  25.         refreshLayout.setOnLoadingListener(this);  
  26.         refreshLayout.setColorSchemeColors(Color.YELLOW,Color.RED);  
  27.   
  28.     }  
  29.     private void initData(){  
  30.         int size = mDatas.size();  
  31.         for (int i = 0; i < 20; i++) {  
  32.             mDatas.add(size+i+"");  
  33.         }  
  34.         adapter.notifyDataSetChanged();  
  35.     }  
  36.   
  37.     //上啦加载的方法  
  38.     @Override  
  39.     public void onLoad() {  
  40.         handler.postDelayed(new Runnable() {  
  41.             @Override  
  42.             public void run() {  
  43.                 initData();  
  44.                 //设置加载状态  
  45.                 refreshLayout.setLoading(false);  
  46.             }  
  47.         },5000);  
  48.   
  49.     }  
  50.   
  51.     @Override  
  52.     public void onRefresh() {  
  53.         handler.postDelayed(new Runnable() {  
  54.             @Override  
  55.             public void run() {  
  56.                 mDatas.clear();  
  57.                 initData();  
  58.                 //设置结束刷新  
  59.                 refreshLayout.setRefreshing(false);  
  60.             }  
  61.         },3000);  
  62.     }  
  63. }  
[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <com.xinyuliu.pulltorefresh.customview.RefreshLayout  
  2.         android:id="@+id/refresh_layout"  
  3.         android:layout_width="match_parent"  
  4.         android:layout_height="match_parent">  
  5.         <ListView  
  6.             android:id="@+id/refresh_lv"  
  7.             android:layout_width="match_parent"  
  8.             android:layout_height="match_parent">  
  9.   
  10.         </ListView>  
  11.     </com.xinyuliu.pulltorefresh.customview.RefreshLayout>  

效果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值