是在主界面有两个空间,一个是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用户信息; 私人上下文语境; 私人ArrayList mOriginalValues; 私人最终对象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 ();//新的集合对象 最后ArrayList newValues=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中的内容方法(推荐)