自动完成功能不会显示下拉列表

时间:2018-06-23 08:51:50

标签: android database autocomplete

我使用了自动完成功能,当数据库很小时,它可以正常工作,但是当数据库增长时,自动完成功能的下拉列表将不起作用(不显示)。为了更加确定,在自定义适配器中,在“ 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();
    }

1 个答案:

答案 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;
                }
            }