实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
来源:互联网 发布:软件测试费 编辑:程序博客网 时间:2024/05/17 02:04
其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter。还有一种是利用控件AutoComplete,这种方式只是在输入框的下方重新显示一个列表,显然,很多时候这两种方式也满足不了我们的要求。
在Activity中定义一个类,让它实现TextWatcher接口,然后再onTextChanged方法中去过滤。然后常见相应的Pattern和match,来判断传入的参数时候符合列表中的数据,符合就加入一个新的列表中。
首先贴出实现的效果图
下面贴出主要实现代码
View Code
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
View Code
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 }
实体类
View Code
本文转载自http://www.hello-code.com
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android开发-UI控件:实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- Android实现ListView过滤功能,继承于BaseAdapter
- Android实现ListView过滤功能之继承BaseAdapter进阶版
- ListView使用ArrayAdapter、BaseAdapter实现
- listview过滤item(基于ArrayAdapter和BaseAdapter)
- listView、baseAdapter、arrayAdapter、simpleAdapter
- ListView的优化和自定义适配器继承于BaseAdapter
- Android入门:ListView(继承BaseAdapter实现)
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- Android之ListView使用方法-ArrayAdapter-SimpleAdapter-BaseAdapter
- 填充ListView(继承BaseAdapter)
- 火狐(FireFox)浏览器屏蔽非80端口的问题
- SQL查询语句简要使用精华——之 简单查询
- MySQL事务隔离级别
- js检测浏览器的版本并给出提示
- Switching Cameras at runtime
- 实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- 转:临界区的产生
- 读书笔记 第七章-进程环境
- 体验Windows 2008 R2的RemoteApp
- MFC 创建启动画面的实现
- 【哈哈,我太牛了】被中差评逼出来的终极解决方案!!
- 浅谈白盒测试中桩函数的灵活应用
- Finder 异常买家检测客户端
- QPushButton 之 default、autoDefault 分析