Android 中文 SDK (47) —— Filter

简介:

一、结构

    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 >

 本文转自博客园农民伯伯的博客,原文链接:Android 中文 SDK (47) —— Filter,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
253 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
9月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
249 0
|
6月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
194 1
|
7月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
128 7
|
9月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
356 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
9月前
|
开发工具 图形学 Android开发
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
Unity与安卓丨unity报错:SDK Tools version 0.0 < 26.1.1
|
9月前
|
开发工具 Android开发
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
Android项目架构设计问题之SDK内部减少每次回调时的冗余判断逻辑如何解决
72 0
|
9月前
|
Java API 开发工具
Android项目架构设计问题之为SDK添加新的回调支持如何解决
Android项目架构设计问题之为SDK添加新的回调支持如何解决
73 0
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
2912 0