如果您希望ListView实时显示用户在searchView中建议的结果,请在适配器中使用Filter.
添加到适配器:
ArrayList adapterDataList = new ArrayList();
ArrayList mFilteredDataList = new ArrayList(listOR);
Filter mFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence searchTerm) {
Locale locale = Locale.getDefault();
FilterResults results = new FilterResults();
if ((searchTerm null) || (searchTerm.length() 0)) {
ArrayList searchList = new ArrayList(adapterDataList);
results.values = searchList;
results.count = searchList.size();
} else {
final String searchTermString = searchTerm.toString().toLowerCase(locale);
final String[] words = searchTermString.split(" ");
final int wordCount = words.length;
final ArrayList newValues = new ArrayList();
for (final String value : adapterDataList) {
if (value == null) {
continue;
}
final String valueText = value.toLowerCase(locale);
for (int k = 0; k < wordCount; k++) {
if (valueText.contains(words[k])) {
newValues.add(value);
break;
}
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredDataList = (ArrayList<String>)results.values;
notifyDataSetChanged();
}
};
public Filter getFilter(){ return mFilter; }
to SearchView's TextChangedListener:
@Override
public void afterTextChanged(Editable searchText) {
mAdapter.getFilter().filter(searchText);
}
我认为它应该工作正常.