转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter。还有一种是利用控件AutoComplete,这种方式只是在输入框的下方重新显示一个列表,显然,很多时候这两种方式也满足不了我们的要求。
在Activity中定义一个类,让它实现TextWatcher接口,然后再onTextChanged方法中去过滤。然后常见相应的Pattern和match,来判断传入的参数时候符合列表中的数据,符合就加入一个新的列表中。
首先贴出实现的效果图
下面贴出主要实现代码

1 package com.example.demo;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.regex.Matcher;
6 import java.util.regex.Pattern;
7 import android.os.Bundle;
8 import android.app.Activity;
9 import android.text.Editable;
10 import android.text.TextWatcher;
11 import android.view.Menu;
12 import android.widget.EditText;
13 import android.widget.ListView;
14
15 public class MainActivity extends Activity {
16
17 List<People> people = new ArrayList<People>() ;
18 EditText editinput;
19 ListView listview;
20 Adapter adapter;
21
22
23 @Override
24 protected void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 setContentView(R.layout.activity_main);
27 editinput = (EditText)findViewById(R.id.edit);
28 listview = (ListView)findViewById(R.id.ydlist);
29 initdata();
30 adapter = new Adapter(getApplicationContext(), people);
31 listview.setAdapter(adapter);
32 editinput.addTextChangedListener(new watcher());
33 }
34
35 void initdata(){
36
37 people.add(new People("张三","1374456"));
38 people.add(new People("张三小子", "12444455"));
39 people.add(new People("李一", "1345555"));
40 people.add(new People("王一", "1355555"));
41 people.add(new People("王二", "1365555"));
42 people.add(new People("李三", "13565555"));
43 people.add(new People("李一", "123555"));
44 }
45
46 class watcher implements TextWatcher{
47
48 @Override
49 public void afterTextChanged(Editable s) {
50 // TODO Auto-generated method stub
51
52 }
53
54 @Override
55 public void beforeTextChanged(CharSequence s, int start, int count,
56 int after) {
57 // TODO Auto-generated method stub
58
59 }
60
61 @Override
62 public void onTextChanged(CharSequence s, int start, int before,
63 int count) {
64 // TODO Auto-generated method stub
65 String aa = s.toString();
66 Pattern p = Pattern.compile(aa);
67 List<People> we = new ArrayList<People>();
68 for(int i=0;i<people.size();i++){
69 People pp = people.get(i);
70 Matcher matcher = p.matcher(pp.getName()+pp.getPhome());
71 if(matcher.find()){
72 we.add(pp);
73 }
74 }
75 adapter = new Adapter(getApplicationContext(), we);
76 listview.setAdapter(adapter);
77 }
78
79 }
80
81 @Override
82 public boolean onCreateOptionsMenu(Menu menu) {
83 // Inflate the menu; this adds items to the action bar if it is present.
84 getMenuInflater().inflate(R.menu.activity_main, menu);
85 return true;
86 }
87
88 }

自定义Adapter

1 package com.example.demo;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import android.content.Context;
6 import android.view.LayoutInflater;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.BaseAdapter;
10 import android.widget.TextView;
11
12 public class Adapter extends BaseAdapter {
13 private List<People> people = new ArrayList<People>();
14 Context ct;
15 private LayoutInflater inflater;
16 public Adapter(Context ct,List<People> people) {
17 // TODO Auto-generated constructor stub
18 this.people = people;
19 this.ct = ct;
20 inflater = (LayoutInflater) ct.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
21 }
22
23 @Override
24 public int getCount() {
25 // TODO Auto-generated method stub
26 return people.size();
27 }
28
29 @Override
30 public Object getItem(int position) {
31 // TODO Auto-generated method stub
32 return people.get(position);
33 }
34
35 @Override
36 public long getItemId(int position) {
37 // TODO Auto-generated method stub
38 return position;
39 }
40
41 @Override
42 public View getView(int position, View convertView, ViewGroup parent) {
43 // TODO Auto-generated method stub
44 People p = people.get(position);
45 if(convertView==null){
46 convertView = inflater.inflate(R.layout.yd_item, null);
47 }
48 TextView tv1=(TextView)convertView.findViewById(R.id.ydtext1);
49 TextView tv2=(TextView)convertView.findViewById(R.id.ydtext2);
50 tv1.setText(p.getName());
51 tv2.setText(p.getPhome());
52 return convertView;
53 }
54
55
56
57 }

实体类

1 package com.example.demo;
2
3 public class People {
4 private String Name ;
5 private String Phome;
6
7
8
9 public String getName() {
10 return Name;
11 }
12
13
14
15 public void setName(String name) {
16 Name = name;
17 }
18
19
20
21 public String getPhome() {
22 return Phome;
23 }
24
25
26
27 public void setPhome(String phome) {
28 Phome = phome;
29 }
30
31
32
33 public People(String name,String phone){
34 super();
35 this.Name = name;
36 this.Phome = phone;
37 }
38 }

转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。的更多相关文章
- Android的ListView分页功能
一.功能分析----ListView“加载更多”,功能如下图所示: 这个效果是当你上拉拖动页面时(注意有区别于下拉刷新),页面提示正在加载,2秒后显示留言更多内容:具体功能知道那我就来讲解下如何实现这 ...
- Android的ListView分页功能(上滑加载更多)
今天主要工作是将之前实现的各种ListView显示全部信息,优化成了每次加载几条数据,然后上滑的时候加载更多,底部显示一个进度条和一个文字提示,然后加载完毕后,将提示信息隐藏. 一边看教学视频一遍敲代 ...
- Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用
如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.s ...
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
转载:http://blog.csdn.net/xiaanming/article/details/12684155 转载请注明出处:http://blog.csdn.net/xiaanming/ar ...
- Android 使用ListView的A-Z字母排序功能实现联系人模块
在上一篇文章其中,主要学习了ListView的A-Z字母排序功能以及依据输入框的输入值改变来过滤搜索结果,假设输入框里面的值为空.更新为原来的列表,否则为过滤数据列表,包含汉字转成拼音的功能.假设你还 ...
- 分享个刚写好的 android 的 ListView 动态加载类,功能全而代码少。
(转载声明出处:http://www.cnblogs.com/linguanh/) 简介: 该ListView 实现动态加载数据,为了方便用户充分地自定义自己的数据源.点击事件,等核心操作, ...
- 含有过滤功能的android流式布局
FilterFlowLayout 含有过滤功能的流式布局, 參考FlowLayout 能够去除宽度不在范围(比例或真实值)内的子view 能够设置最大行数 能够加入组件间水平间距 能够加入行间距 系统 ...
- 【Android】Listview返回顶部,快速返回顶部的功能实现,详解代码。
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...
随机推荐
- Java——银行业务调度系统
需求: 模拟实现银行业务调度系统逻辑,具体需求如下: Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. Ø 有三种对应类型的客户:VIP客户,普通 ...
- 黑马程序员——JAVA基础之异常处理机制
------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...
- java枚举实例
实例一: public enum OrderOption {ASC,DESC; } 实例二(带参数构造函数): public enum OrderOption { ASC("ASC" ...
- 纯CSS绘制三角形(各种角度)
我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...
- Python使用MySQL数据库的方法以及一个实例
使用环境:Windows+python3.4+MySQL5.5+Navicat 一.创建连接 1.准备工作,想要使用Python操作MySQL,首先需要安装MySQL-Python的包,在Python ...
- 【转】关于B/S架构应用程序的权限设置分析和总结
来自:http://www.cnblogs.com/zhouxunyu/p/3790122.html 分析:不同的用户登录到系统后赋予不同的操作权限,而用户存在于数据库中,标识用户权限的字段也保存在数 ...
- 计算机中丢失 msvcr110.dll 怎么办
笔者在一次运行 php.exe 时,运到“无法启动此程序,因为计算机中丢失 MSVCR110.dll.尝试重新安装该程序以解决此问题.”的提示,当时很无语,因为系统是刚刚安装好的,而且是最新版本的. ...
- event.srcElement兼容处理
在IE下,event对象有srcElement属性,但是没有target属性:Firefox下,even对象有target属性,但是没有srcElement属性.. 解决方法:使用obj(obj = ...
- android操作sdcard中的多媒体文件(二)——音乐列表的更新
android操作sdcard中的多媒体文件(二)——音乐列表的更新 原文地址 在上一篇随笔中,我介绍了如何在程序中查询sdcard内的多媒体文件,并且显示到播放列表中,但是,如果在sdcard内删除 ...
- 【linux】who&&w
who和w 看到目前服务器所登陆的用户,区别是w能看到更详细的信息. [root@andon tmp]# who admin tty5[tty指本地登陆] 2016-05-27 15:16[登陆时间] ...