正在开发一个Android应用程序,该应用程序具有带有带有自定义适配器的autocompletetextview的表单,为此,我们有大约1k个条目的arraylist。但是使用1K数据无法正常工作。大约有400个条目,它正在工作,但过滤速度很慢。 如何处理这种大数据集?
以下是用于过滤的代码段:
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (ToMeet toMeet : tempItems) {
if (toMeet.getNm().toLowerCase().contains(constraint.toString().toLowerCase()) ||
(toMeet.getAptNo() != null && toMeet.getAptNo().toLowerCase().toLowerCase().
contains(constraint.toString().toLowerCase()))) {
suggestions.add(toMeet);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
ArrayList<ToMeet> filteredList = (ArrayList<ToMeet>) ((ArrayList<ToMeet>) results.values).clone();
clear();
for (ToMeet toMeet : filteredList) {
add(toMeet);
}
notifyDataSetChanged();
}
}
};
答案 0 :(得分:0)
在您的publishResults
方法中,您为每个结果调用Adapter
add
方法。每次调用add方法时,都会通知列表已更改。
这可能会导致您看到缓慢的行为。
请改为使用Adapter
addAll
方法。除非您使用addAll
setNotifyOnChange
应该为您调用数据集已更改的通知。
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
clear();
if (results != null && results.count > 0) {
addAll(results)
}
}
您还可以优化performFiltering
方法以使用trie数据结构,但我认为您不需要1000个项目。