Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
来源:互联网 发布:oracle数据库安装成功 编辑:程序博客网 时间:2024/05/21 08:03
其实实现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 @Override24 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 @Override49 public void afterTextChanged(Editable s) {50 // TODO Auto-generated method stub51 52 }53 54 @Override55 public void beforeTextChanged(CharSequence s, int start, int count,56 int after) {57 // TODO Auto-generated method stub 58 59 }60 61 @Override62 public void onTextChanged(CharSequence s, int start, int before,63 int count) {64 // TODO Auto-generated method stub65 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 @Override82 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 stub18 this.people = people;19 this.ct = ct;20 inflater = (LayoutInflater) ct.getSystemService(Context.LAYOUT_INFLATER_SERVICE);21 }22 23 @Override24 public int getCount() {25 // TODO Auto-generated method stub26 return people.size();27 }28 29 @Override30 public Object getItem(int position) {31 // TODO Auto-generated method stub32 return people.get(position);33 }34 35 @Override36 public long getItemId(int position) {37 // TODO Auto-generated method stub38 return position;39 }40 41 @Override42 public View getView(int position, View convertView, ViewGroup parent) {43 // TODO Auto-generated method stub44 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 }
转自:http://www.cnblogs.com/LIANQQ/archive/2013/03/01/2938200.html
0 0
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android开发-UI控件:实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter
- Android实现ListView过滤功能之继承BaseAdapter进阶版
- ListView使用ArrayAdapter、BaseAdapter实现
- Android入门:ListView(继承BaseAdapter实现)
- Android之ListView使用方法-ArrayAdapter-SimpleAdapter-BaseAdapter
- listview过滤item(基于ArrayAdapter和BaseAdapter)
- listView、baseAdapter、arrayAdapter、simpleAdapter
- Android ListView(四) ---继承BaseAdapter
- Android-ListView详解(SimpleAdapter,ArrayAdapter,BaseAdapter,OnItenClickListener,OnScrollListener)
- android--(布局ListView、优化、刷新分页、ArrayAdapter、SimpleAdapter 、BaseAdapter)
- 指南针
- 君悦凯乐(文化)艺术团
- UTF8二进制数据在控制台打印成字符(C/C++)
- 使用C#格式化字符串
- POJ - 3667 Hotel(线段树)
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- android 广播
- 通过itunes store向iOS设备安装测试版(未上线)的程序
- 25个有用的apt包管理命令
- 13周课后自主-项目一-(3)还是基本的数组
- iterator标签
- Python 列表
- [C++]C++ 第一章
- UFLDL Exercise:Softmax Regression