zoukankan      html  css  js  c++  java
  • Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

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

    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 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 }

    实体类

    View Code
     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 }
  • 相关阅读:
    3D切割轮播图
    网站公共部分的复用
    Git的安装及布置
    完整轮播图
    百度检索例子
    第五章 pycharm编辑器安装和使用
    第四章 散列类型的方法
    第一章 认识爬虫以及环境安装
    主机访问Ubuntu虚拟机的jupyter
    12306购票的testerSunshine带源码刷票
  • 原文地址:https://www.cnblogs.com/LIANQQ/p/2938200.html
Copyright © 2011-2022 走看看