zoukankan      html  css  js  c++  java
  • 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"为大家带来优秀的翻译和示例:)

     
  • 相关阅读:
    pickle模块
    json模块
    sys模块的介绍
    Java中char和String的处理问题
    javaweb学习 基础(三)Cookie Session
    javaweb学习 基础(二)httpservlet
    javaweb学习 基础(一)servlet day09-day10
    java学习 网络编程 tcp
    java学习 网络编程 ip,udp
    了解数据仓库
  • 原文地址:https://www.cnblogs.com/over140/p/1887892.html
Copyright © 2011-2022 走看看