Содержимое адаптера изменилось, но ListView не получил уведомление.Из AutoCompleteTextView - PullRequest
0 голосов
/ 05 апреля 2019

Я получил эту проблему из своего AutoCompleteTextView при выборе.

Как я могу решить эту ошибку?

java.lang.IllegalStateException: содержимое адаптера изменилось, ноListView не получил уведомление.Убедитесь, что содержимое вашего адаптера не изменено из фонового потока, а только из потока пользовательского интерфейса.Убедитесь, что ваш адаптер вызывает notifyDataSetChanged () при изменении его содержимого.

Код:

public class AutoSuggestAdapter extends ArrayAdapter<String> implements Filterable {

List<String> shippers;

public AutoSuggestAdapter(Context context, int textViewResourceId) {
    super(context, textViewResourceId);
    shippers = new ArrayList<String>();
}

public void setData(List<String> stringList) {

}

@Override
public int getCount() {
    return shippers.size();
}

@Override
public String getItem(int index) {
    return shippers.get(index);
}


@Override
public Filter getFilter() {

    Filter myFilter = new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            if (constraint != null) {
                Logger.d("Start load address");
                    new QueryAddressRepository(getContext()).getAdressList(constraint.toString(), address_list -> {
                        shippers = address_list;
                        Logger.d("Done");
                    });
                // Now assign the values and count to the FilterResults object
                filterResults.values = shippers;
                filterResults.count = shippers.size();
            }
            return filterResults;
        }

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

    };

    return myFilter;
}

}

...