返回介绍

Filter

发布于 2025-03-09 17:00:28 字数 6074 浏览 0 评论 0 收藏 0

Filter

翻译时间:2010-11-07

版本:Android 2.2 r1

结构

继承关系

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 的用户):

Java: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);

}

}

XML: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>

XML: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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文