Android 中文 SDK (47) —— Filter

前言

  本章内容是 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 {
    /** 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

<?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>

 

结束

  再次感谢"henly.zhang"为大家带来优秀的翻译和示例:)

转载:http://www.cnblogs.com/over140/archive/2010/11/25/1887892.html

时间: 2024-11-03 08:57:15

Android 中文 SDK (47) —— Filter的相关文章

Android 中文 SDK —— ADT 14.0.0 (ADT14插件更新说明)

前言 本章内容为Android SDK/ADT Plugin for Eclipse/ADT 14.0.0章节,为ADT14插件的更新说明,翻译来自:"ritter",欢迎访问他的微博:"http://blog.csdn.net/ritterliu",再次感谢"ritter" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cn

Android 中文api (81)——InputMethod [输入法]

前言 本章内容是android.view.inputmethod.InputMethod,为输入法相关章节,版本为Android 2.3 r1,翻译来自"六必治",欢迎大家访问他的博客:http://www.cnblogs.com/zcmky/,再次感谢"六必治" !期待你加入Android API 中文的翻译,联系我over140@gmail.com.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Andr

Android中文API (39) —— AbsSpinner

前言 本章内容是 android.widget.AbsSpinner,版本为Android 2.2 r1,翻译来自"思考的狼",欢迎大家访问他的博客:http://blog.163.com/sikaodelang@126/ ,再次感谢"思考的狼" !期待你一起参与Android API 的中文翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Android中文翻

Android中文API (110) —— CursorTreeAdapter

前言 本章内容是android.widget.CursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",欢迎访问它的博客:"http://chirs1012f.javaeye.com/",再次感谢"深夜未眠" !期待你一起参与Android API的翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Andr

Android 中文API (46) —— SimpleAdapter

前言 本章内容是 android.widget.SimpleAdapter,版本为Android 2.2 r1,翻译来自"德罗德",欢迎大家访问他的博客:http://sparkrico.javaeye.com/,再次感谢"德罗德" !期待你一起参与Android中文API的翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Android中文翻译组:http:/

Android中文API(99)—— RelativeLayout

前言 本章内容是android.widget.RelativeLayout,版本为Android 2.3 r1,翻译来自"Atomic",欢迎大家访问他的博客:http://iiapk.com,再次感谢"Atomic" !期待你一起参与Android API的翻译,联系我over140@gmail.com.    声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com/ Android中文翻译组:http://goo.gl/

Android中文API(139) —— SQLiteOpenHelper

前言 本章内容android.database.sqlite.SQLiteOpenHelper章节,版本为Android 4.0 r1,翻译来自:"StreamH",欢迎访问他的博客:"http://blog.csdn.net/qs_csu",再次感谢"StreamH" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblo

android海康sdk的使用-Android海康威视SDK的使用·

问题描述 Android海康威视SDK的使用· 海康威视SDK获取通道号的方法在哪里?这是说这些通道号是从哪个方法获取的.

Android中的Intent Filter简介

Intent是Android应用程序核心组件之间通信和传递信息的核心机制.与之相关的IntentFilter也具有相关的安全机制(测试)来进行约束.本文将对其进行详细介绍. 一.Intent和IntentFilter简介 一个应用程序的三个核心组件(活动,服务和广播接收器)都是通过消息即意图(Intents)来激活的.Intent消息传送是相同或不同应用中组件运行时晚绑定的一种机制.意图本身(一个意图对象)是一个包含被执行操作抽象描述的被动的数据结构.或,对于广播而言,是某件已经发生并被声明的事