您的位置:首页 > 其它

EditText配合listview实现过滤

2015-12-14 20:44 274 查看
今天记个笔记 使用edittext和listview来实现过滤效果

主要涉及知识

1.普通listview+adapter 的使用方法

2.adapter实现filterable接口,adapter同时包含一继承自filter的内部类用于实现过滤规则的定义

3.edittext的监听,包括文本变化和退格键的监听

第一步:创建一个adapter,继承BaseAdapter实现Filterable接口,主要是实现里面 getFilter()方法;

第二步:准备一些数据,自己定义一个实体类,实现这个listview的列表;

第三部:在adapter中创建一个继承自filter的内部类,主要里面有两个方法FilterResults performFiltering(CharSequence prefix),和 publishResults(CharSequence constraint,FilterResults results)。具体实现如下:

protected FilterResults performFiltering(CharSequence prefix){

FilterResults results = new FilterResults();

if(alllistdata==null) {

synchronized(mLock) {

alllistdata = new ArrayList<Bean>(beanList);//

}

}

if(prefix==null||prefix.length()==0) {

synchronized(mLock) {

// ArrayList<T> list = new ArrayList<T>();//无

ArrayList<Bean> list = new ArrayList<Bean>(

alllistdata);// List<T>

results.values = list;

results.count = list.size();

}

} else {

String prefixString = prefix.toString().toLowerCase();

final ArrayList<Bean> hanzi = alllistdata;// 汉字String

final int count = hanzi.size();

final Set<Bean> newValues = new HashSet<Bean>(count);// 支持多音字,不重复

for(int i = 0;i<count;i++) {

final String value = hanzi.get(i).getName();// 汉字String

final String pinyin = hanzi.get(i).getNamePY().toLowerCase();

if(pinyin.contains(prefixString.toLowerCase())||pinyin.indexOf(prefixString.toLowerCase())!=-1||pinyin.equals(prefixString.toLowerCase())) {// 任意匹配

newValues.add(hanzi.get(i));

} else

if(value.indexOf(prefixString)!=-1) {

newValues.add(hanzi.get(i));

}

if(maxMatch>0) {// 有数量限制

if(newValues.size()>maxMatch-1) {// 不要太多

break;

}

}

}

List<Bean> list = Set2List(newValues);// 转成List

results.values = list;

results.count = list.size();

}

return results;



beanList = (List<Bean>)results.values;

if(results.count>0) {

notifyDataSetChanged();

} else {

notifyDataSetInvalidated();

}


第四步:实现监听

使用addTextChangedListener(),

public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

System.out.println(arg1 + "-----" + arg2 + "------" + arg3);

search=arg0.toString();

adapter.getFilter().filter(search);

adapter.notifyDataSetChanged();

}



在setOnKeyListener()实现退格监听



public boolean onKey(View arg0, int arg1, KeyEvent arg2) {

// TODO Auto-generated method stub

if (arg1 == KeyEvent.KEYCODE_DEL) {

System.out.println("onDelete");

adapter.updateList(list);

adapter.getFilter().filter(search);

}

return false;



updateList(list)主要作用是更新list



public void updateList(List<Bean> list){

this.beanList=list;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: