转--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——交通灯
/* * 交通灯管理系统的 项目需求: * 模拟实现: 十字路口的交通灯系统逻辑, 具体需求如下: * 异步随机生成按照各个路线行驶的车辆. * 信号灯忽略黄灯. 只考虑红灯和绿灯. ...
- CSS中控制换行的四种属性
一.white-space 可以实现HTML中PRE标签的效果,以及单元格的noWrap效果,点此查看示例. Example Source Code 语法: white-space : normal ...
- Latex 编译错误: ! pdfTeX error (ext4): \pdfendlink ended up in different nesting level than \pd fstartlink. 解决方法
最近写 AAAI 的文章,下载了其模板,但是蛋疼的是,总是提示错误,加上参考文献总是出错: 如下: ! pdfTeX error (ext4): \pdfendlink ended up in dif ...
- 论文阅读之 A Convex Optimization Framework for Active Learning
A Convex Optimization Framework for Active Learning Active learning is the problem of progressively ...
- weblogic管理1——创建 和 删除一个domain
说明本文环境 WLS_HOME=/home/weblogic/Oracle/Middleware创建一个domian 第一种方法通过console 创建>[weblogic@11g Mid ...
- BP神经网络——交叉熵作代价函数
Sigmoid函数 当神经元的输出接近 1时,曲线变得相当平,即σ′(z)的值会很小,进而也就使∂C/∂w和∂C/∂b会非常小.造成学习缓慢,下面有一个二次代价函数的cost变化图,epoch从15到 ...
- addClass的用法和is函数的用法
<html> <head> <meta charset="utf-8"> <script type="text/javascri ...
- #你好Unity3D#Hierarchy视图监听gameObject点击事件
今天无意间又找到了个好方法 1 2 3 4 5 6 7 8 9 10 [InitializeOnLoadMethod] static void Start () { Selection.s ...
- SharePoint入门识记
SharePoint站点层次结构: 1.Web Application: 一般创建后对应一个IIS Web Site, 默认创建后是打不开的,因为网站没有任何内容. 2.Site Collection ...
- 编写使用SpringSecurity的JUnit测试提醒
近日在使用SpringSecurity的项目中发现一个小问题,就是在接口上加了@Secured标注限制调用接口权限时,某些JUnit无法正常调用了. 例如: @Secured(PrivilegeDAO ...