?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
Filter
翻譯時間:2010-11-07
版本:Android 2.2 r1
?
結(jié)構(gòu)
繼承關(guān)系
public abstract class Filter extends Object
????????
java.lang.Object
???? android.widget.Filter
?
類概述
過濾器通過過濾模式來約束數(shù)據(jù),通常由實現(xiàn)了Filterable接口的子類來生成。
過濾操作是通過調(diào)用 filter(CharSequence) 或者 filter(CharSequence, android.widget.Filter.FilterListener)這些異步方法來完成的。以上方法一旦被調(diào)用,過濾請求就會被遞交到請求隊列中等待處理,同時該操作會取消那些之前遞交的但是還沒有被處理的請求。
?
構(gòu)造函數(shù)
???????? public Filter ()
創(chuàng)建一個新的異步過濾器。
?
公共方法
public CharSequence convertResultToString (Object resultValue)
??? 將受過濾的集合對象轉(zhuǎn)換成CharSequence文本。所有繼承了Filter的子類應(yīng)該重寫該方法。該方法的默認(rèn)實現(xiàn):如果參數(shù)為null則返回空字符串或者返回參數(shù)的字符串形式.
參數(shù)
??????????????????????????? resultValue? 轉(zhuǎn)換成CharSequence文本的對象
?????????????????? 返回值
??????????????????????????? CharSequence 文本
??????????????????
public final void filter(CharSequence constraint, Filter.FilterListener listener)
啟動一個異步的過濾操作。對該方法的調(diào)用會取消之前隊列中等待處理的過濾請求并且遞交新的過濾請求等待執(zhí)行。完成過濾操作之后,通知監(jiān)聽器。
參數(shù)
??????????????????????????? constraint? 過濾數(shù)據(jù)的約束條件
listener? 監(jiān)聽過濾操作完成之后發(fā)出的通知
參見
??????????????????????????? filter(CharSequence)
performFiltering(CharSequence)
publishResults(CharSequence, android.widget.Filter.FilterResults)
?
public final void filter(CharSequence constraint)
啟動一個異步的過濾操作。對該方法的調(diào)用會取消之前隊列中等待處理的過濾請求并且遞交新的過濾請求等待執(zhí)行。
參數(shù)
??????????????????????????? constraint? 過濾數(shù)據(jù)的約束條件
?????????????????? 參見
??????????????????????????? filter(CharSequence, android.widget.Filter.FilterListener)
?
受保護(hù)方法
protected abstract Filter.FilterResults performFiltering (CharSequence constraint)
根據(jù)約束條件調(diào)用一個工作線程過濾數(shù)據(jù)。子類必須實現(xiàn)該方法來執(zhí)行過濾操作。過濾結(jié)果以Filter.FilterResults的形式返回,然后在UI線程中通過publishResults(CharSequence,android.widget.Filter.FilterResults)方法來發(fā)布。
約定:當(dāng)約束條件為null時,原始數(shù)據(jù)必須被恢復(fù)。
參數(shù)
constraint ????? 約束條件
返回值
過濾結(jié)果
參見
??? ?????????????????? filter(CharSequence, android.widget.Filter.FilterListener)
??? ?????????????????? publishResults(CharSequence, android.widget.Filter.FilterResults)
?? ???????????????????? Filter.FilterResults
?
protected abstract void publishResults (CharSequence constraint, Filter.FilterResults results)
通過調(diào)用UI線程在用戶界面發(fā)布過濾結(jié)果。子類必須實現(xiàn)該方法來顯示performFiltering(CharSequence)的過濾結(jié)果。
參數(shù)
constraint ????? 約束條件
results ?? 過濾結(jié)果
參見
??? ?????????????????? filter(CharSequence, android.widget.Filter.FilterListener)
performFiltering(CharSequence)
Filter.FilterResults
?
補充
示例代碼
?????????????????? 未過濾的數(shù)據(jù)如下圖所示:
為過濾器設(shè)置約束條件(只顯示年齡為22的用戶):
???????? Java:TestFilter.java
public class TestFilter extends ListActivity {
???
??? @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);? //為該過濾器設(shè)置約束條件
??????? setListAdapter(simpleAdapter);
??? }
}
????????
???????? XML: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>
?
XML: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>