适配器的内容已更改,但ListView没有收到通知。来自AutoCompleteTextView

时间:2019-04-05 12:40:17

标签: android android-listview android-adapter

选择时,我从AutoCompleteTextView中遇到了这个问题。

如何解决此错误?

  

java.lang.IllegalStateException:适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。确保您的适配器在其内容更改时调用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;
}

}

0 个答案:

没有答案