适用于MultiAutoTextView的自定义适配器

时间:2012-12-07 07:42:03

标签: android filter custom-adapter

我为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();
        }
    }
    }
}

1 个答案:

答案 0 :(得分:0)

替换此行

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

这一个

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