2012-12-07 140 views
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(); 
     } 
    } 
    } 
} 
+0

*为我过滤*结果不显示 - 护理解释?也不要在'performFiltering()'方法中调用'publishResults(constraint,results)'方法,只返回'results'。另外你的'sublist'应该是'conlist'的**副本**,它将被用作传递给适配器的完整项目的副本(所以你将在'Filter'中拥有整套初始值)。 – Luksprog

+0

如果问一个愚蠢的问题,我很抱歉,但我怎样才能设置“子列表”作为筛选器中的适配器的新列表?我想让过滤器也能够显示子字符串的结果.. – aneela

+0

看到这个:'if(results.count> 0){clear(); (String item:results.values){add(item);}}' – Luksprog

回答

0

替换该行

if (((java.lang.String) temp).toLowerCase().contains(constraint)) 

与这一个

if (temp.toLowerCase().contains(constr)) 
+0

constr是一个字符串,不是charSequence,所以我直接使用约束.. – aneela