SwipeRefreshLayout的簡要說明及使用demo


在最新的  Android Support Library, revision 19.1.0 (March 2014)   添加了SwipeRefreshLayout控件。

版本發布的說明信息如下:

 

Changes for v4 support library: Added the SwipeRefreshLayout class, which enables users to refresh the contents of a view with a vertical swipe gesture. Fixed accessibility issues with navigation drawers. Changes for v7 appcompat library: Fixed background issues with the action bar.

鏈接:http://developer.android.com/intl/zh-cn/tools/support-library/index.html

 

 

 

SwipeRefreshLayout 的官方說明地址如下:

http://developer.android.com/intl/zh-cn/reference/android/support/v4/widget/SwipeRefreshLayout.html

 

幾點重要的說明如下:

 

1. SwipeRefreshLayout 是用來做下拉刷新的,可以實現Google Now上的下拉刷新效果 
2. SwipeRefreshLayout 只能有一個直接的子view,也就是說SwipeRefreshLayout 只能直接包裹一個子view(當然這個子view可以包含多個view), 如果不滿足這個條件,運行的時候會報如下的錯誤: java.lang.IllegalStateException: SwipeRefreshLayout can host only one direct child 
3. SwipeRefreshLayout 包裹的子view必須是可以支持下拉刷新手勢的,例如ListView和ScrollView 。

 

使用的demo 如下 :

 

效果圖:

device-2014-04-01-161720

 

核心的代碼 :

package com.hsx.demo; import java.util.ArrayList; import java.util.List; import java.util.Random; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.widget.SwipeRefreshLayout; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener { private SwipeRefreshLayout swipeLayout; List<String> data = new ArrayList<String>(); MyAdapter adapter; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container); swipeLayout.setOnRefreshListener(this); swipeLayout.setColorScheme(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); ListView listView = (ListView) findViewById(R.id.test_listview); adapter = new MyAdapter(); listView.setAdapter(adapter); } private void initData() { data.add("蘇州"); data.add("北京"); data.add("上海"); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); swipeLayout.setRefreshing(false); adapter.notifyDataSetChanged(); } }; public void onRefresh() { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } Random random = new Random(); data.add("天津" + random.nextInt(100)); handler.sendEmptyMessage(1000); } }).start(); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item, null); TextView tvItem = (TextView) convertView.findViewById(R.id.item_tv); tvItem.setText(data.get(position)); return convertView; } } }

 

主布局文件 xml:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" >

    <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_container"
 android:layout_width="match_parent"
 android:layout_height="match_parent" >

        <ListView android:id="@+id/test_listview"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@android:color/white" >
        </ListView>
    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

 

 

但是該控件目前感覺尚不完整,無法真正的使用到項目中。例如這樣的一個問題,可以再下拉刷新的過程中繼續下拉刷新,目前還沒有想到好的辦法解決 。期待后續的Google優化。

 

 

 

demo下載地址:http://download.csdn.net/detail/abc13939746593/7131001


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM