前言

  本章内容是 android.widget.Filter,译为"过滤器",版本为Android 2.2 r1,翻译来自"henly.zhang",再次感谢"henly.zhang" !期待你一起参与 Android中文API 的翻译,联系我over140@gmail.com。

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.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

public class TestFilter extends ListActivity{
/** Calledwhentheactivityisfirstcreated. */
@Override
public void onCreate(BundlesavedInstanceState){
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);
SimpleAdaptersimpleAdapter
= new SimpleAdapter( this ,list,R.layout.user, new String[]{ " name " , " age " }, new int []{R.id.name,R.id.age});
Stringstr
= new String( " 22 " );
CharSequenceconstraint
= str.subSequence( 0 ,str.length());
Filterfilter
= simpleAdapter.getFilter(); // 得到一个过滤器
filter.filter(constraint); // 为该过滤器设置约束条件
setListAdapter(simpleAdapter);
}
}

      main.xml

<? xmlversion="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

<? xmlversion="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"为大家带来优秀的翻译和示例:)


更多相关文章

  1. Android(安卓)ConstraintLayout 约束布局
  2. Android下读取logcat的信息
  3. android联系人过滤
  4. Android(安卓)中文 SDK (49) —— Filter.FilterResults
  5. android布局参照示例_约束布局Android示例–第2部分
  6. android下获取有线和无线的Ip地址
  7. Android(安卓)NDK中使用LOG调试C++程序
  8. Android硬件开发之——NFC技术
  9. Android_ExpandableListView

随机推荐

  1. Android中一个单行与多行并存的listview
  2. android PopupWindow 底部阴影外部空间取
  3. ActionBarSherlock
  4. android读写sd卡文件
  5. android 登录界面
  6. 疯狂android讲义---事件处理2
  7. 如何反编译android的apk文件得到资源文件
  8. Android上传文件到Django服务器
  9. android中系统时间
  10. Android设置Progress的颜色