在我获得并发修改例外之前。我通过创建一个新的arraylist来避免它。但是,现在我得到一个Null指针异常&奇怪的是,我已经完成了所有必要的空检查。我仍然不明白可能出现的问题。
这是我的publishResults()方法:
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
mSuggestions.clear();
for (Item item : mItemsAll) {
try {
if (item.name.toLowerCase(Locale.US).startsWith(constraint.toString().toLowerCase(Locale.US))) {
mSuggestions.add(item);
}
} catch (Exception ex) {
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = mSuggestions;
filterResults.count = mSuggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
这里mItemsAll保存给予适配器的mainList的副本
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
@SuppressWarnings("unchecked")
ArrayList<Item> filteredList = (ArrayList<Item>) results.values;
if (results != null && results.count > 0) {
clear();
for (Item c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
};
结果包含从`performFiltering()。
获得的过滤结果clear()`- clears all the elements of the main list given to the adapter & `add(c), adds the filtered list to the list.
我在这一行获得了Concurrent Modification例外:
for (Item c : filteredList)
所以我删除了这一行:
ArrayList<Item> filteredList = (ArrayList<Item>) results.values;
&安培;添加了这些行
ArrayList<Item> filteredList = new ArrayList<Item>();
filteredList.addAll((Collection<? extends Item>) results.values);
但是现在我在getview方法中得到了Null Pointer异常。但根据我的代码,它应该转到getview,只有过滤后的结果有一些值。那为什么我得到这个例外?
先谢谢..