В моем приложении у меня есть ListView, адаптер для него и фильтр для адаптера. Это фильтр:
private Filter nameFilter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
List<Contact> resultContacts = (List<Contact>) results.values;
filteredContacts = resultContacts;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Contact> filteredContacts = new ArrayList<Contact>();
for(Contact c : rawContacts){
if(!c.getName().toLowerCase().contains(constraint.toString().toLowerCase())){
continue;
}
filteredContacts.add(c);
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredContacts;
return filterResults;
}
};
Правильно ли я понимаю, что publishResults ВСЕГДА вызывается после выполнения его работы по фильтрации? Даже эта работа очень тяжелая и долгая? У меня есть ситуация, когда publishResults запускается внезапно, и, конечно, поле «FilterContacts» моего адаптера устанавливается в NULL.
Я попытался упростить работу по выполнению фильтрации (удалив цикл и напишите что-то вроде «FilterContacts.add (new Contact ())»), и тогда все работает нормально.
И, наконец, этот код работал нормально несколько дней ... Я запутался. Кто-нибудь может объяснить, что происходит?)
Заранее спасибо!