首页 > 代码库 > Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件

Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件

SwipeRefreshLayout在v4包下,对应的v4 Demo中也有相应的例子。如果没有请下载最新support-v4

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

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

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

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


Demo如下:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. public class SwipeRefreshLayoutActivity extends Activity implements OnRefreshListener {  
  2.     public static final String[] TITLES =  
  3.     {  
  4.             "Henry IV (1)",  
  5.             "Henry V",  
  6.             "Henry VIII",  
  7.             "Richard II",  
  8.             "Richard III",  
  9.             "Merchant of Venice",  
  10.             "Othello",  
  11.             "King Lear",  
  12.             "Henry IV (1)",  
  13.             "Henry V",  
  14.             "Henry VIII",  
  15.             "Richard II",  
  16.             "Richard III",  
  17.             "Merchant of Venice",  
  18.             "Othello",  
  19.             "King Lear",  
  20.             "Henry IV (1)",  
  21.             "Henry V",  
  22.             "Henry VIII",  
  23.             "Richard II",  
  24.             "Richard III",  
  25.             "Merchant of Venice",  
  26.             "Othello",  
  27.             "King Lear",  
  28.             "Henry IV (1)",  
  29.             "Henry V",  
  30.             "Henry VIII",  
  31.             "Richard II",  
  32.             "Richard III",  
  33.             "Merchant of Venice",  
  34.             "Othello",  
  35.             "King Lear"  
  36.     };  
  37.     // Try a SUPER quick refresh to make sure we don‘t get extra refreshes  
  38.     // while the user‘s finger is still down.  
  39.     private static final boolean SUPER_QUICK_REFRESH = false;  
  40.     private View mContent;  
  41.     private SwipeRefreshLayout mSwipeRefreshWidget;  
  42.     private ListView mList;  
  43.     private Handler mHandler = new Handler();  
  44.     private final Runnable mRefreshDone = new Runnable() {  
  45.   
  46.         @Override  
  47.         public void run() {  
  48.             mSwipeRefreshWidget.setRefreshing(false);  
  49.         }  
  50.   
  51.     };  
  52.     @Override  
  53.     public void onCreate(Bundle bundle) {  
  54.         super.onCreate(bundle);  
  55.         setContentView(R.layout.swipe_refresh_widget_sample);  
  56.         mSwipeRefreshWidget = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_widget);  
  57.         mSwipeRefreshWidget.setColorScheme(R.color.color1, R.color.color2, R.color.color3,  
  58.                 R.color.color4);  
  59.         mList = (ListView) findViewById(R.id.content);  
  60.         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,  
  61.                 android.R.layout.simple_list_item_1, android.R.id.text1, TITLES);  
  62.         mList.setAdapter(arrayAdapter);  
  63.         mSwipeRefreshWidget.setOnRefreshListener(this);  
  64.         mSwipeRefreshWidget.setProgressViewEndTarget(false8);  
  65.     }  
  66.   
  67.     @Override  
  68.     public void onRefresh() {  
  69.         refresh();  
  70.     }  
  71.   
  72.   
  73.     @Override  
  74.     public boolean onCreateOptionsMenu(Menu menu) {  
  75.         MenuInflater inflater = getMenuInflater();  
  76.         inflater.inflate(R.menu.swipe_refresh_menu, menu);  
  77.         return true;  
  78.     }  
  79.   
  80.     /** 
  81.      * Click handler for the menu item to force a refresh. 
  82.      */  
  83.     @Override  
  84.     public boolean onOptionsItemSelected(MenuItem item) {  
  85.         final int id = item.getItemId();  
  86.         switch(id) {  
  87.             case R.id.force_refresh:  
  88.                 mSwipeRefreshWidget.setRefreshing(true);  
  89.                 refresh();  
  90.                 return true;  
  91.         }  
  92.         return false;  
  93.     }  
  94.   
  95.     private void refresh() {  
  96.         mHandler.removeCallbacks(mRefreshDone);  
  97.         mHandler.postDelayed(mRefreshDone, 1000);  
  98.     }  
  99. }  

swipe_refresh_widget_sample.xml

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:id="@+id/swipe_refresh_widget"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <!-- some full screen pullable view that will be the offsetable content -->  
  7.   
  8.     <ListView  
  9.         android:id="@+id/content"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="match_parent" />  
  12.   
  13. </android.support.v4.widget.SwipeRefreshLayout>  

Android v4包中的 SwipeRefreshLayout 官方的下拉刷新组件