Android 中文 SDK (47) ―― Filter
前言
本章内容是 android.widget.Filter,译为"过滤器",版本为Android 2.2 r1,翻译来自"henly.zhang",再次感谢"henly.zhang" !期待你一起参与 Android中文API 的翻译,联系我over140@gmail.com。
声明
欢迎转载,但请保留文章原始出处:)
农民伯伯:http://over140.blog.51cto.com/
Android中文翻译组:http://code.taobao.org/project/view/404/
正文
一、结构
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
publicclassTestFilterextendsListActivity{/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<HashMap<String,String>>list=new
ArrayList<HashMap<String,String>>();
HashMap<String,String>map1=newHashMap<String,String>();
HashMap<String,String>map2=newHashMap<String,String>();
HashMap<String,String>map3=newHashMap<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);
SimpleAdaptersimpleAdapter=newSimpleAdapter(this,list,R.layout.user,newString[]{"name","age"},newint[]{R.id.name,R.id.age});
Stringstr=newString("22");
CharSequenceconstraint=str.subSequence(0,str.length());
Filterfilter=simpleAdapter.getFilter();//得到一个过滤器
filter.filter(constraint);//为该过滤器设置约束条件
setListAdapter(simpleAdapter);
}
}
main.xml
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayoutandroid:id="@+id/listlinearlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ListViewandroid:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false"
android:scrollbars="vertical"/>
</LinearLayout>
</LinearLayout>
user.xml
<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns: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"
>
<TextViewandroid:id="@+id/name"
android:layout_width="150dip"
android:layout_height="30dip"
android:textSize="12pt"
/>
<TextViewandroid:id="@+id/age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12pt"
/>
</LinearLayout>
结束
再次感谢"henly.zhang"为大家带来优秀的翻译和示例:)
更多相关文章
- Android中设置动画循环旋转的方法
- 向模拟器发短信打电话的方法
- android手机屏幕适配方法
- 更新android studio gradle 不成功解决方法
- 在android中实现动态跑动的图表实现方法
- Android service的开启和绑定,以及调用service的方法
- TextView 中文字滚动的必要条件
- Android中JNI的使用方法