public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<DatumVoters> filteredResults = null;
if (constraint.length() == 0) {
filteredResults = odatumList;
} else {
filteredResults =
getFilteredResults(constraint.toString().toLowerCase());
}
results.values = filteredResults;
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults
results) {
ddatumList = (List<DatumVoters>) results.values;
adapter.notifyDataSetChanged();
}
};
}
protected List<DatumVoters> getFilteredResults(String s) {
List<DatumVoters> results = new ArrayList<>();
for (DatumVoters item : odatumList) {
if (item.getFirstname().toLowerCase().contains(s) ||
item.getVoterId().toLowerCase().contains(s)) {
results.add(item);
}
}
return results;
}
Try this (just a guess):
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
ArrayList list = autocomplete(constraint.toString());
if (list != null) {
filterResults.values = list;
filterResults.count = list.size();
}
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
//change the underlying data immediately before notifying UI
resultList = (ArrayList)results.values;
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}