AutoCompleteTextView - disable filtering

Alon Amir picture Alon Amir · Dec 14, 2011 · Viewed 7.6k times · Source

I'm retrieving a list of strings from a webservice and I want to list them up on a AutoCompleteTextField regardless of the built-in AutoCompleteTextField filters.

How do I do that? is there a way to disable it's inner filtering easily (preferably without subclassing) I've loaded all my results into a ArrayAdapter, the problem is that some of them don't show up because of the filtering.

If I'm going in the wrong direction please point me to the right direction.

Answer

Krzysztow picture Krzysztow · Feb 15, 2012

Probably @Alon meant subclassing ArrayAdapter, instead of AutoCompleteTextView. In getFilter() method one has to return a custom filter, that performs no filtering at all (in its performFiltering()). Probably the performance could be a problem - because theread is spawned. The best thing would be to derive from TextEdit and implement own completion popup. But this is again too many hassle for me, so far. Finally, I did something as follows and it works for me. Any feedback appreciated.

public class KArrayAdapter<T> 
extends ArrayAdapter<T>
{
    private Filter filter = new KNoFilter();
    public List<T> items;

    @Override
    public Filter getFilter() {
        return filter;
    }

    public KArrayAdapter(Context context, int textViewResourceId,
            List<T> objects) {
        super(context, textViewResourceId, objects);
        Log.v("Krzys", "Adapter created " + filter);
        items = objects;
    }

    private class KNoFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence arg0) {
            FilterResults result = new FilterResults();
                result.values = items;
                result.count = items.size(); 
            return result;
        }

        @Override
        protected void publishResults(CharSequence arg0, FilterResults arg1) {
            notifyDataSetChanged();
        }
    }
}

Hope it helps.