MainActivity如下:

package cc.testfilterable;

import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.widget.ListView;
import android.app.Activity;
import android.content.Context;
/**
* Demo描述:
* 利用Filter过滤数据
* 可用于AutoCompleteTextView筛选数据等功能
*
* 备注说明:
* 该Demo只表述原理,代码逻辑较简单,有一些小的bug.
* 完整的应用请参见以下资料.
*
* 参考资料:
* 1 http://gundumw100.iteye.com/blog/1446507
* 2 http://blog.csdn.net/ssstudio/article/details/7579089
* 3 http://blog.csdn.net/jiahui524/article/details/7802033
*
*/
public class MainActivity extends Activity {
private Context mContext;
private ListView mListView;
private ListViewAdapter mListViewAdapter;
private ArrayList<String> mArrayList;
private HashMap<String, String> mHashMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
} private void init(){
mContext=this;
mListView=(ListView) findViewById(R.id.listView);
mArrayList=new ArrayList<String>();
mArrayList.add("张三1");
mArrayList.add("李四1");
mArrayList.add("王五1");
mArrayList.add("张三2");
mArrayList.add("李四2");
mArrayList.add("王五2");
mArrayList.add("张三3");
mArrayList.add("李四3");
mArrayList.add("王五3");
mArrayList.add("张三4");
mArrayList.add("李四4");
mArrayList.add("王五4");
mListViewAdapter=new ListViewAdapter(mContext, mArrayList);
//过滤数据
//过滤出姓名里面包含"张"的数据
mListViewAdapter.getFilter().filter("张");
mListView.setAdapter(mListViewAdapter);
} }

ListViewAdapter如下:

package cc.testfilterable;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.TextView; public class ListViewAdapter extends BaseAdapter {
private NameFilter mNameFilter;
private List<String> mArrayList;
private List<String> mFilteredArrayList;
private LayoutInflater mLayoutInflater;
public ListViewAdapter(Context context,List<String> arrayList) {
mArrayList = arrayList;
mLayoutInflater=LayoutInflater.from(context);
mFilteredArrayList=new ArrayList<String>();
} @Override
public int getCount() {
if (mArrayList == null) {
return 0;
} else {
return (mArrayList.size());
} } @Override
public Object getItem(int position) {
if (mArrayList == null) {
return null;
} else {
return mArrayList.get(position);
}
} @Override
public long getItemId(int position) {
return position;
} public Filter getFilter() {
if (mNameFilter == null) {
mNameFilter = new NameFilter();
}
return mNameFilter;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemView = null;
itemView = convertView;
ViewHolder viewHolder = null;
if (itemView == null) {
itemView = mLayoutInflater.inflate(R.layout.listviewitem, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) itemView.findViewById(R.id.textView);
itemView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) itemView.getTag();
} if (mArrayList != null) {
if (viewHolder.textView != null) {
viewHolder.textView.setText((mArrayList.get(position)));
} } convertView = itemView;
return convertView;
} private class ViewHolder {
TextView textView;
} //过滤数据
class NameFilter extends Filter {
//执行筛选
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults filterResults = new FilterResults();
for (Iterator<String> iterator = mArrayList.iterator(); iterator.hasNext();) {
String name = iterator.next();
System.out.println("---> name=" + name);
if (name.contains(charSequence)) {
mFilteredArrayList.add(name);
}
}
filterResults.values = mFilteredArrayList;
return filterResults;
} //筛选结果
@Override
protected void publishResults(CharSequence arg0, FilterResults results) {
mArrayList = (List<String>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
} }} }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:gravity="center"
/> </LinearLayout>

Android利用Filter过滤数据的更多相关文章

  1. Android利用数据库传送数据

    ---恢复内容开始--- 一.建表 //通过SQLiteDatabase 创建数据库stu.db3 final SQLiteDatabase db = SQLiteDatabase.openOrCre ...

  2. Android --------- 利用SharedPreferences存取数据

    //向SharedPreferences中存放数据 //1.定义SharedPreferences对象,通过getSharedPreferences方法得到 SharedPreferences sp ...

  3. 利用filter过滤去重

    var r, ary = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry']; r ...

  4. 用php自带的filter函数验证、过滤数据 -转载

    PHP过滤器包含两种类型 Validation:用来验证验证项是否合法 Sanitization:用来格式化被验证的项目,因此它可能会修改验证项的值,将不合法的字符删除等. input_filters ...

  5. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  6. [PY3]——过滤数据——列表推导、filter()、itertools.compress()

    问题 你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列 解决方案 最简单的过滤数据的方法,就是使用列表推导. 使用列表推导的一个潜在缺陷就是如果输入非常大的时候会产生一个非常大的结果集 ...

  7. Android利用Fiddler进行网络数据抓包,手机抓包工具汇总,使用mono运行filddler

    Fiddler抓包工具 Fiddler抓包工具很好用的,它可以干嘛用呢,举个简单例子,当你浏览网页时,网页中有段视频非常好,但网站又不提供下载,用迅雷下载你又找不到下载地址,这个时候,Fiddler抓 ...

  8. Android利用Fiddler进行网络数据抓包

    最新最准确内容建议直接访问原文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信 ...

  9. Android开发探秘之四:利用Intent实现数据传递

    在Android开发过程中,很多人都熟悉Intent,这是个用于在多个View之间共享数据的类.本节主要是继承上节,通过点选ListView中的文本,把文本中的URL加载到一个新的页面上,并且打印出来 ...

随机推荐

  1. PHPCMS标签:get标签

    GET标签源自于PHPCMS 2008版,其使用SQL语句直接获取数据的特性,成为大家制作模板的首选. 在V9中这样强大的工具也得到保留下来. GET标签使用方式如下: {pc:get sql=&qu ...

  2. cx_Oracle使用方法一

    cx_Oracle使用方法 正确安装好cx_oracle之后,要使用它来连接到oracle数据库进行操作,具体应该分3步走: 第一步:导入cx_Oracle ,建立连接 >>> im ...

  3. adb找不到设备

    提示信息如下所示: adb server is out of date.killing... adb server didn't ACK *failed to start daemon * error ...

  4. hive源代码解析之一hive主函数入口

    hive其实做的就是解析一条sql然后形成到mapreduce任务,就是一个代码解释器.hive源代码本身就可以分为ql/metasotre/service/serde 这几块:其中 对于Hive来说 ...

  5. u-boot子目录Makefile分析

    一.概述 u-boot的子目录Makefile是整个Makefile体系的重要组成部分,决定了对应子目录的编译过程. 二.分析 以cpu/arm920t/Makefile为例进行说明 (1)首先,调用 ...

  6. bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1891  Solved: 919[Submit][Statu ...

  7. wireshark设置抓服务器的包

    wireshark设置抓服务器的包:

  8. 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量

    14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量 InnoDB 使用后台线程来服 ...

  9. 14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器

    14.6.4 Configuring the Memory Allocator for InnoDB 配置InnoDB 内存分配器 当InnoDB 被开发时,内存分配提供了操作系统和 run-time ...

  10. wcf中 生成x5.09证书的工具

    原文链接http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-progr ...