天天看點

Android 中文 SDK (47) —— Filter

正文

  一、結構

    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       限制條件

  傳回值

  過濾結果

  參見

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

  通過調用UI線程在使用者界面釋出過濾結果。子類必須實作該方法來顯示performFiltering(CharSequence)的過濾結果。

  results    過濾結果

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

        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

    android:orientation="horizontal"

    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"

本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/582589,如需轉載請自行聯系原作者