Google提供了一个官方的下拉刷新控件SwipeRefreshLayout,个人感觉还不错!见惯了传统的下拉刷新,这个反而给人耳目一新的感觉(Gmail邮箱已经使用这种下拉刷新了)。

SwipeRefreshLayout在V4包下,对应的V4 Demo中也有相应的例子。

SwipeRefreshLayout只能有一个直接子View,可能是一个ListView或一个Layout或其他需要刷新的组件。

setOnRefreshListener 用于监听刷新的动作。SwipeRefreshLayout 下拉,就会有刷新的效果出来,触发该监听。

如果需要一个刷新的动画,setRefreshing(true), 停: setRefreshing(false)

如果要禁用刷新动画和手势响应,ssetEnable(false),  恢复:setEnable(true)

Google也在官方网站给出了V4的兼容包:

Android SwipeRefreshLayout 官方下拉刷新控件介绍_android

相关API如下:

Android SwipeRefreshLayout 官方下拉刷新控件介绍_android_02

和XlistView差不多,还是很方便使用的,大概就这4个常用的方法,下面贴个简单的例子。

1、布局文件:

​​



    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2. android:layout_width="match_parent"
    3. android:layout_height="match_parent" >
    4.
    5. <android.support.v4.widget.SwipeRefreshLayout
    6. android:id="@+id/id_swipe_ly"
    7. android:layout_width="match_parent"
    8. android:layout_height="match_parent" >
    9.
    10. <ListView
    11. android:id="@+id/id_listview"
    12. android:layout_width="match_parent"
    13. android:layout_height="match_parent" >
    14. </ListView>
    15. </android.support.v4.widget.SwipeRefreshLayout>
    16.
    17. </RelativeLayout>

    2、MainActivty:


    ​​

     


    1. package com.zhy.swiperefreshlayoutdemo;  
    2.
    3. import java.util.ArrayList;
    4. import java.util.Arrays;
    5. import java.util.List;
    6.
    7. import android.annotation.SuppressLint;
    8. import android.app.Activity;
    9. import android.os.Bundle;
    10. import android.os.Handler;
    11. import android.support.v4.widget.SwipeRefreshLayout;
    12. import android.util.Log;
    13. import android.widget.ArrayAdapter;
    14. import android.widget.ListView;
    15.
    16. public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener
    17. {
    18.
    19. private static final int REFRESH_COMPLETE = 0X110;
    20. private SwipeRefreshLayout mSwipeLayout;
    21. private ListView mListView;
    22. private ArrayAdapter<String> mAdapter;
    23. private List<String> mDatas = new ArrayList<String>(Arrays.asList("Java", "Javascript", "C++", "Ruby", "Json",
    24. "HTML"));
    25.
    26. private Handler mHandler = new Handler()
    27. {
    28. public void handleMessage(android.os.Message msg)
    29. {
    30. switch (msg.what)
    31. {
    32. case REFRESH_COMPLETE:
    33. "Lucene", "Canvas", "Bitmap"));
    34. mAdapter.notifyDataSetChanged();
    35. false);
    36. break;
    37.
    38. }
    39. };
    40. };
    41.
    42. @SuppressLint("InlinedApi")
    43. protected void onCreate(Bundle savedInstanceState)
    44. {
    45. super.onCreate(savedInstanceState);
    46. setContentView(R.layout.activity_main);
    47.
    48. mListView = (ListView) findViewById(R.id.id_listview);
    49. mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.id_swipe_ly);
    50.
    51. this);
    52. mSwipeLayout.setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
    53. android.R.color.holo_orange_light, android.R.color.holo_red_light);
    54. new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDatas);
    55. mListView.setAdapter(mAdapter);
    56.
    57. }
    58.
    59. public void onRefresh()
    60. {
    61. 2000);
    62.
    63. }
    64. }


    效果图:

    Android SwipeRefreshLayout 官方下拉刷新控件介绍_SwipeRefreshLayout_03