Android 中文 SDK (47) —— Filter
正文 一、结构 public abstract classFilterextendsObject java.lang.Object android.widget.Filter 二、概述 过滤器通过过滤模式来约束数据,通常由实现了Filterable接口的子类来生成。过滤操作是通过调用filter(CharSequence)或者filter(CharSequence, android.widget.Filter.FilterListener)这些异步方法来完成的。以上方法一旦被调用,过滤请求就会被递交到请求队列中等待处理,同时该操作会取消那些之前递交的但是还没有被处理的请求。 三、构造函数 publicFilter() 创建一个新的异步过滤器。 四、公共方法 public CharSequenceconvertResultToString(Object resultValue) 将受过滤的集合对象转换成CharSequence文本。所有继承了Filter的子类应该重写该方法。该方法的默认实现:如果参数为null则返回空字符串或者返回参数的字符串形式. 参数 resultValue转换成CharSequence文本的对象 返回值 CharSequence文本 public final voidfilter(CharSequence constraint, Filter.FilterListener listener) 启动一个异步的过滤操作。对该方法的调用会取消之前队列中等待处理的过滤请求并且递交新的过滤请求等待执行。完成过滤操作之后,通知监听器。 参数 constraint过滤数据的约束条件 listener监听过滤操作完成之后发出的通知 参见 filter(CharSequence) performFiltering(CharSequence) publishResults(CharSequence, android.widget.Filter.FilterResults) public final voidfilter(CharSequence constraint) 启动一个异步的过滤操作。对该方法的调用会取消之前队列中等待处理的过滤请求并且递交新的过滤请求等待执行。 参数 constraint过滤数据的约束条件 参见 filter(CharSequence, android.widget.Filter.FilterListener) 五、 受保护方法 protected abstract Filter.FilterResultsperformFiltering(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 voidpublishResults(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 > 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582589,如需转载请自行联系原作者