1
我已经实现了我的MultiAutoCompleteTextView自定义适配器。它按照我想要的方式进行过滤,但结果不会在我过滤时显示。我认为这与publishResult(..)方法有关,但我无法弄清楚。MultiAutoTextView自定义适配器
public class customConAdapter<String> extends ArrayAdapter implements Filterable {
private Filter filter;
List<String> sublist=new ArrayList<String>();
List<String> conlist = new ArrayList<String>();
public customConAdapter(Context context,
int textViewResourceId, List<String> conlist) {
super(context, textViewResourceId, conlist);
this.conlist = conlist;
this.sublist = conlist;
// TODO Auto-generated constructor stub
}
public Filter getFilter() {
if (filter == null){
filter = new myFilter();
}
return filter;
}
private class myFilter extends Filter
{
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
Log.i("in perfrom filtering",constraint.toString());
FilterResults results = new FilterResults();
/* if ((constraint == null) || (constraint.length() == 0))
{
ArrayList<String> list = new ArrayList<String>();
results.values = list;
results.count = list.size();
}
else*/
String constr = (String) constraint.toString();
final List<String> newItems = new ArrayList<String>();
for (String temp : conlist)
{
if (((java.lang.String) temp).toLowerCase().contains(constraint))
{ Log.i("the item of list that contains the constraint is" ,(java.lang.String)temp);
newItems.add(temp);
}
}
results.values = newItems;
results.count = newItems.size();
publishResults(constraint,results);
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results)
{
if (results.count > 0)
{
sublist=(ArrayList<String>) results.values;
notifyDataSetChanged();
}
else
{
notifyDataSetInvalidated();
}
}
}
}
*为我过滤*结果不显示 - 护理解释?也不要在'performFiltering()'方法中调用'publishResults(constraint,results)'方法,只返回'results'。另外你的'sublist'应该是'conlist'的**副本**,它将被用作传递给适配器的完整项目的副本(所以你将在'Filter'中拥有整套初始值)。 – Luksprog
如果问一个愚蠢的问题,我很抱歉,但我怎样才能设置“子列表”作为筛选器中的适配器的新列表?我想让过滤器也能够显示子字符串的结果.. – aneela
看到这个:'if(results.count> 0){clear(); (String item:results.values){add(item);}}' – Luksprog