Arraylist 中有 1000 个条目的 AutocompleteTextView 不起作用

Posted

技术标签:

【中文标题】Arraylist 中有 1000 个条目的 AutocompleteTextView 不起作用【英文标题】:AutocompleteTextView with 1000 entries in Arraylist not working 【发布时间】:2019-05-24 20:28:05 【问题描述】:

在一个 android 应用程序上工作,它有一个带有 autocompletetextview 和自定义适配器的表单,我们有大约 1k 个条目的数组列表。但是对于 1K 数据,它不起作用。大约有 400 个条目,它正在工作,但过滤速度很慢。 如何处理这种大数据集?

下面是过滤的代码sn-p:

     @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();
        
    
;

【问题讨论】:

【参考方案1】:

在您的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 数据结构,但我认为您不需要为 1,000 个项目。

【讨论】:

谢谢,会检查并通知您。

以上是关于Arraylist 中有 1000 个条目的 AutocompleteTextView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何查看所有 ArrayList 条目并删除特定条目?

展平 python 数据框中的条目,如 Apache PIG 包

如何处理 bash 脚本读取的 CSV 文件中的逗号

如果文件有超过 1000 个条目,将文件的内容读入 unordered_map 是不是有效

表访问的性能

网络服务器的日志文件中有 404 个 SysVol 条目