【发布时间】:2011-02-09 22:46:13
【问题描述】:
在我的应用程序中,我有 ListView、Adapter 和 Filter for Adapter。这是过滤器:
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;
}
};
我是否正确理解在 performFiltering 完成工作后总是调用 publishResults?甚至这份工作也很难而且很长?我有一种情况,publishResults 突然运行,当然我的适配器的字段“filteredContacts”设置为 NULL。
我试图简化 performFiltering 的工作(通过删除循环并编写类似“filteredContacts.add(new Contact())”之类的内容),然后一切正常。
最后几天这段代码运行良好......我很困惑。任何人都可以解释发生了什么吗?) 提前致谢!
【问题讨论】:
标签: android listview filter null adapter