前言
聲明
歡迎轉載,但請保留文章原始出處:)
正文
一、結構
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
六、補充
示例代碼
未過濾的資料如下圖所示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SMfVjMtETMtATMwIzLcFTMvwFMxAjMvwFM0EjclZ3bvwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.jpg)
為過濾器設定限制條件(隻顯示年齡為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"
結束
再次感謝"henly.zhang"為大家帶來優秀的翻譯和示例:)
轉載:http://www.cnblogs.com/over140/archive/2010/11/25/1887892.html