我已经为我的 MultiAutoCompleteTextView 实现了一个自定义适配器。它只是按照我想要的方式进行过滤,但结果没有在我过滤时显示。我认为与 publishResult(..) 方法有关,但我无法弄清楚。
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();
}
}
}
}