Настройка фильтра адаптера ListView
Помогите, пожалуйста, исправить ошибку в коде. Поиск работает, но при уменьшении строки поиска - не откатывает результаты поиска - оставляет все как есть (только результаты последнего поиска). То есть если ввести в итоге поисковый запрос и получить при этом пустой список, то при удалении поискового запроса, список так же остается пустым...
Такое ощущение, что отфильтрованный список перезаписывает исходный...
private List<Zakazchik> listZakazchik = new ArrayList<>(); // фильтрую его
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults result = new FilterResults();
List<Zakazchik> allZakazchik = listZakazchik;
if(constraint == null || constraint.length() == 0){
result.values = allZakazchik;
result.count = allZakazchik.size();
}else{
List<Zakazchik> filteredList = new ArrayList<Zakazchik>();
for(Zakazchik j: allZakazchik){
if(j.getName().toLowerCase().contains(constraint))
filteredList.add(j);
else if (j.getSubcategory().toLowerCase().contains(constraint))
filteredList.add(j);
}
result.values = filteredList;
result.count = filteredList.size();
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count == 0) {
notifyDataSetInvalidated();
} else {
listZakazchik = (ArrayList<Zakazchik>) results.values;
notifyDataSetChanged();
}
}
};
return filter;
}
Источник: Stack Overflow на русском