不止一个人遇到了如何为使用SimpleCursorAdapter的ListView实现过滤器的问题。我遇到了这个问题,并且在这个网上找到了很多关于这个问题的答案。我从各处收集了一些代码,直到我终于找到了工作,而且看起来更简单。如何使用编辑文本和SimpleCursor适配器过滤ListView?
我见过的谷歌I/O 2010 - YouTube上的ListView视频的世界,它说,你必须实现用getFilter方法并实现过滤的类适配器上,这样的事情:
public class MyListCursorAdapter extends SimpleCursorAdapter implements Filterable{
...
@Override
public Filter getFilter() {
return new Filter(){
@Override
protected FilterResults performFiltering(CharSequence charSequence){
FilterResults results = new FilterResults();
//If there's nothing to filter on, return the original data for your list
if(charSequence == null || charSequence.length() == 0){
results.values = originalData;
results.count = originalData.getCount();
}
else{
Cursor filterResultsData = null;
filterResultsData = DB.getResults(charSequence);
results.values = filterResultsData;
results.count = filterResultsData.getCount();
}
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults){
filteredData = (Cursor) filterResults.values;
if (filterResults.count > 0) {
notifyDataSetChanged();
}else{
notifyDataSetInvalidated();
}
}
};
}
}
至少是我试图做的。我已经看到使用ArrayAdapter而不是Cursor,效果很好。但在光标的情况下,它不起作用,至少不适合我。也许我做错了什么。所以我对于做什么感到困惑。我知道我有一个编辑文本,一个列表视图,每次在我的编辑文本上放一些文本,我希望我的列表得到过滤。
现在我要回答我的问题,因为我想与大家分享我的解决方案。