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
原创粉丝点击