实现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