AutoCompleteTextView с пользовательским ArrayAdapter и фильтром - PullRequest
1 голос
/ 23 декабря 2011

У меня проблема при попытке отфильтровать результаты в AutoCompleteTextView из LogCat. Я знаю, что фильтрация выполняется правильно, но не обновляет представление: / Я что-то забыл о каких-либо предложениях или помощи?

Вот исходный код фильтра.

@Override
public Filter getFilter() {
    Filter myFilter = new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            Log.i(TAG, "Perform filtering with constraint: " + constraint.toString());
            List<String> resultsSuggestions = new ArrayList<String>();
            Log.i(TAG, "COUNT: " + getCount());
            for (int i = 0; i < getCount(); i++) {
                if(getItem(i).getSuggestionValue().startsWith(constraint.toString())){
                    Log.i(TAG, "ADDED");
                    resultsSuggestions.add(getItem(i).getSuggestionValue());
                }
            }
            FilterResults results = new FilterResults();
            results.values = resultsSuggestions;
            results.count = resultsSuggestions.size();
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results != null && results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    };
    return myFilter;
}

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Отсутствует часть, что мне нужно установить новые значения из фильтра, поэтому я просто изменил

publushResults();

и теперь он работаетПравильный код ниже.

    @Override
    @SuppressWarnings("unchecked")
    protected void publishResults(CharSequence constraint, FilterResults results) {
        clear();
        ArrayList<Suggestions> newValues = (ArrayList<Suggestions>) results.values;
        for (int i = 0; i < newValues.size(); i++) {
            add(newValues.get(i));
        }
        if(results.count>0){
            notifyDataSetChanged();
        } else{
            notifyDataSetInvalidated();
        }
    }
1 голос
/ 15 февраля 2012

Другое обновление - при вводе и удалении всех символов в текстовом поле поиска очень быстро происходит сбой приложения на newValues.size () или newValues.get (i), поскольку newValues ​​может быть нулевым.Итак, вот код, который вы должны использовать:

@Override
    @SuppressWarnings("unchecked")
    protected void publishResults(CharSequence constraint, FilterResults results) {
        clear();
        ArrayList<Suggestions> newValues = (ArrayList<Suggestions>) results.values;
        if(newValues !=null) {
            for (int i = 0; i < newValues.size(); i++) {
                add(newValues.get(i));
            }
            if(results.count>0){
                notifyDataSetChanged();
            } else{
                notifyDataSetInvalidated();
        }
    }
...