我使用了自动完成功能,当数据库很小时,它可以正常工作,但是当数据库增长时,自动完成功能的下拉列表将不起作用(不显示)。为了更加确定,在自定义适配器中,在“ FilterResults performFiltering”中输入“建议”,如果“建议大小为1,则建议中断”,则编写if,并且可以正常工作。但我需要搜索所有数据库的行。以下是我的代码的一部分:
private Filter FieldFilter = new Filter(){
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<ModelCategory> suggestions = new ArrayList<>();
if(constraint == null || constraint.length() == 0){
suggestions.addAll(FieldListFull);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for(ModelCategory item : FieldListFull) {
if (item.getNaqsh_jelo().toLowerCase().contains(filterPattern)){
suggestions.add(item);
if (suggestions.size() == 1{
break;
}
}
}
}
results.values = suggestions;
results.count = suggestions.size();
return results;
}
如果我没有写“如果该检查建议的大小”,则下面的3行
results.values = suggestions;
results.count = suggestions.size();
return results;
不会运行!!!!实际上,在for循环的中间,没有错误的FilterResult函数停止运行并运行PublishResult,然后在publishResult中说“结果为null”! 下面是我的PublishResult函数:
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
clear();
try {
addAll((List) results.values);
}catch (Exception e){}
notifyDataSetChanged();
}
答案 0 :(得分:0)
我解决了这个问题! 由于数据库中的空字段而发生此问题! FilterResult函数的“ for循环”如下所示更改
for(ModelCategory item : FieldListFull) {
try{
if (item.getNaqsh_jelo().toLowerCase().contains(filterPattern) && item.getNaqsh_jelo() != null){
suggestions.add(item);
}
} catch (Exception e) {
continue;
}
}