Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 中文 SDK (47) —— Filter

Android 中文 SDK (47) —— Filter

編輯:Android開發實例

正文

  一、結構

    public abstract class Filter extends Object

 
 

java.lang.Object

     android.widget.Filter


 

 

  二、概述

    過濾器通過過濾模式來約束數據,通常由實現了Filterable接口的子類來生成。 過濾操作是通過調用 filter(CharSequence) 或者 filter(CharSequence, android.widget.Filter.FilterListener)這些異步方法來完成的。以上方法一旦被調用,過濾請求就會被遞交到請求隊列中等待處理,同時該操作會取消那些之前遞交的但是還沒有被處理的請求。

 

  三、構造函數
 

         public Filter ()

  創建一個新的異步過濾器。

 

 

  四、公共方法
 

 

  public CharSequence convertResultToString (Object resultValue)

        將受過濾的集合對象轉換成CharSequence文本。所有繼承了Filter的子類應該重寫該方法。該方法的默認實現:如果參數為null則返回空字符串或者返回參數的字符串形式.

  參數

                            resultValue 轉換成CharSequence文本的對象

                 返回值

                            CharSequence 文本

                  

  public final void filter(CharSequence constraint, Filter.FilterListener listener)

  啟動一個異步的過濾操作。對該方法的調用會取消之前隊列中等待處理的過濾請求並且遞交新的過濾請求等待執行。完成過濾操作之後,通知監聽器。

  參數

                   constraint 過濾數據的約束條件

  listener 監聽過濾操作完成之後發出的通知

    參見

                   filter(CharSequence)

  performFiltering(CharSequence)

  publishResults(CharSequence, android.widget.Filter.FilterResults)

 

  public final void filter(CharSequence constraint)

  啟動一個異步的過濾操作。對該方法的調用會取消之前隊列中等待處理的過濾請求並且遞交新的過濾請求等待執行。

  參數

                  constraint 過濾數據的約束條件

                 參見

                              filter(CharSequence, android.widget.Filter.FilterListener) 

 

 

  五、 受保護方法
 

 

  protected abstract Filter.FilterResults performFiltering (CharSequence constraint)

  根據約束條件調用一個工作線程過濾數據。子類必須實現該方法來執行過濾操作。過濾結果以Filter.FilterResults的形式返回,然後在UI線程中通過publishResults(CharSequence,android.widget.Filter.FilterResults)方法來發布。

  約定:當約束條件為null時,原始數據必須被恢復。

  參數

  constraint       約束條件

  返回值

  過濾結果

  參見

                       filter(CharSequence, android.widget.Filter.FilterListener)

                       publishResults(CharSequence, android.widget.Filter.FilterResults)

                        Filter.FilterResults

 

  protected abstract void publishResults (CharSequence constraint, Filter.FilterResults results)

  通過調用UI線程在用戶界面發布過濾結果。子類必須實現該方法來顯示performFiltering(CharSequence)的過濾結果。

  參數

  constraint       約束條件

  results    過濾結果

  參見

                       filter(CharSequence, android.widget.Filter.FilterListener)

  performFiltering(CharSequence)

        Filter.FilterResults 

 

 

  六、補充
 

    示例代碼

      未過濾的數據如下圖所示:

      

      為過濾器設置約束條件(只顯示年齡為22的用戶):

      

      TestFilter.java

 

public class TestFilter extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayList<HashMap<String,String>> list = new
                      ArrayList <HashMap<String, String>>();
        HashMap<String, String> map1 = new HashMap<String, String>();
        HashMap<String, String> map2 = new HashMap<String, String>();
        HashMap<String, String> map3 = new HashMap<String, String>();
        map1.put("name", "henly");
        map1.put("age", "22");
        map2.put("name", "john");
        map2.put("age", "23");
        map3.put("name", "lilei");
        map3.put("age", "22");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.user, new String[]{"name","age"}, new int[]{R.id.name,R.id.age});
        String str = new String("22");
        CharSequence constraint = str.subSequence(0, str.length());
        Filter filter = simpleAdapter.getFilter(); //得到一個過濾器
        filter.filter(constraint);  //為該過濾器設置約束條件
        setListAdapter(simpleAdapter);
    }
}

 

      main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout android:id="@+id/listlinearlayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <ListView android:id="@id/android:list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:drawSelectorOnTop="false"
            android:scrollbars="vertical" />
        </LinearLayout>
</LinearLayout>

 

      user.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="12dip"
    android:paddingRight="12dip"
    android:paddingTop="1dip"
    android:paddingBottom="1dip"
    >
<TextView android:id="@+id/name"
    android:layout_width="150dip"
    android:layout_height="30dip"
    android:textSize="12pt"
    />
<TextView android:id="@+id/age"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="12pt"
    />
</LinearLayout>


 

 

結束
 

  再次感謝"henly.zhang"為大家帶來優秀的翻譯和示例:)
 

轉自:http://www.cnblogs.com/over140/archive/2010/11/25/1887892.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved