edittext + listview实现搜索listview中的内容方法(推荐)

  

 edittext + listview实现搜索listview中的内容方法(推荐)

  

是在主界面有两个空间,一个是EditText,一个是视图,视图是放在EditText下面的,然后自定义建立一个适配器适配器,

  

这个适配器要继承可滤过的这个接口,并实现这个接口的两个方法,一个是过滤方法,一个是过滤后的方法,一般我们是在过滤方法里面实现过滤,

  

在过滤后的方法里面调用notifyDataSetChanged();也就是使适配器更新数据,这里还有用到一个pinyin4j-2.5.0.jar的架包,这个主要是汉字转拼

  

  

<强> MainActivity.Java

        公开课MainActivity延伸活动{   私人EditText et_filter;   私人UserAdapter适配器;   私人ListView lv_list;      @Override   保护空白>   包com.example.edittextfilterdemo;   进口java.util.ArrayList;   进口并不知道;   进口android.content.Context;   进口android.util.Log;   进口android.view.LayoutInflater;   进口android.view.View;   进口android.view.ViewGroup;   进口android.widget.BaseAdapter;   进口android.widget.Filter;   进口android.widget.Filterable;   进口android.widget.TextView;/* *   *自定义具有过滤功能的适配器类   *   */公共类UserAdapter扩展BaseAdapter实现滤过性的{   私人MyFilter MyFilter;   私人List用户信息;   私人上下文语境;   私人ArrayListmOriginalValues;      私人最终对象mLock=新对象();      公共UserAdapter(上下文语境,List用户信息){   这一点。上下文=上下文;   这一点。用户信息=用户信息;      }      @Override   公共int getCount () {//TODO自动生成方法存根   返回userInfos.size ();   }      @Override   公共对象getItem (int arg0) {//TODO自动生成方法存根   返回userInfos.get (arg0);   }      @Override   公共长getItemId (int位置){//TODO自动生成方法存根   返回的位置;   }      @Override   公众视线getView (int位置、视图convertView ViewGroup父){      视图视图=convertView;      ViewHolder持有人;   如果(查看==null) {   视图=LayoutInflater.from(上下文).inflate (R.layout.list_item   零);   持有人=new ViewHolder ();      持有人。tv_nick=(TextView) view.findViewById (R.id.tv_nick);   持有人。tv_mobile=(TextView) view.findViewById (R.id.tv_mobile);   view.setTag(持有人);   其他}{   持有人=(ViewHolder) view.getTag ();   }      holder.tv_nick.setText (userInfos.get(位置).getUsername ());   holder.tv_mobile.setText (userInfos.get(位置).getPhonenum ());      返回视图;   }      静态类ViewHolder {      TextView tv_nick;   TextView tv_mobile;   }      @Override   公共过滤器getFilter () {   如果(myFilter==null) {   myFilter=new myFilter ();   }   返回myFilter;   }      类{MyFilter扩展过滤器      @Override   保护FilterResults performFiltering (CharSequence进行前缀){//持有过滤操作完成之后的数据。该数据包括过滤操作之后的数据的值以及数量。数:数量的值包含过滤操作之后的数据的值   FilterResults结果=new FilterResults ();      如果(mOriginalValues==null) {   同步(mLock) {//将列表的用户集合转换给这个原始数据的ArrayList   mOriginalValues=new ArrayList(用户信息);   }   }   如果(前缀==null | | prefix.length ()==0) {   同步(mLock) {   ArrayList列表=new ArrayList (   mOriginalValues);   结果。值=列表;   结果。数=list.size ();   }   其他}{//做正式的筛选   .toLowerCase字符串prefixString=prefix.toString () ();//声明一个临时的集合对象将原始数据赋给这个临时变量   最后ArrayList值=mOriginalValues;      最后一个int数=values.size ();//新的集合对象   最后ArrayListnewValues=new ArrayList (   数);      for (int i=0;我& lt;计数;我+ +){//如果姓名的前缀相符或者电话相符就添加到新的集合   最终用户信息值=https://www.yisu.com/zixun/(用户信息)values.get(我);   日志。我(“编码器”、“PinyinUtils.getAlpha (value.getUsername ())”   + PinyinUtils.getFirstSpell (value.getUsername ()));      如果(PinyinUtils.getFirstSpell (value.getUsername ()) .startsWith (   prefixString)   | | value.getPhonenum () .startsWith (prefixString) | | value.getUsername () .startsWith (prefixString)) {      newValues.add(价值);   }   }//然后将这个新的集合数据赋给FilterResults对象   结果。值=newValues;   结果。数=newValues.size ();   }      返回结果;   }      @Override   保护无效publishResults (CharSequence进行约束,   FilterResults结果){//重新将与适配器相关联的单重赋值一下   用户信息=(List

edittext + listview实现搜索listview中的内容方法(推荐)