Einige Quelle-Code, den ich geerbt haben, wirft manchmal eine ConcurrentModificationException auf dieser Linie:ConcurrentModificationException innen PublishResult - ArrayAdapter
for (String c : filteredList) {
Körper:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> filteredList = (ArrayList<String>) results.values;
if (results != null && results.count > 0) {
clear();
for (String c : filteredList) {
add(c);
}
notifyDataSetChanged();
}
}
Wie soll ich diesen Fehler verhindern?
Normalerweise verwende ich nur die gefilterte Liste, sondern direkt eine weitere Runde der Iteration. Sie können immer einen Verweis auf die vollständige Liste halten, wenn das Filterkriterium null/leer ist. – Karakuri
das ist freilich viel schwieriger mit 'ArrayAdapter' zu tun, weil viel von seinem Umgang mit den Elementen internen und nicht zur Verfügung (und die API leider nicht über eine' setItems (List) 'Methode, die wirklich bedauerlich ist) . Ich glaube, Sie können Ihr Leben einfacher durch die Erweiterung BaseAdapter stattdessen machen - die Dinge ArrayAdapter ziemlich trivial liefern, sind neu. –
Karakuri
Was wäre ein Hot-Fix zu diesem fatalen Problem oben, während ArrayAdapter w/o Verlängerung BaseAdapter mit? –