【问题标题】:AutocompleteTextView with 1000 entries in Arraylist not workingArraylist 中有 1000 个条目的 AutocompleteTextView 不起作用
【发布时间】: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();
        }
    }
};

【问题讨论】:

    标签: android performance large-data autocompletetextview


    【解决方案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 个项目。

    【讨论】:

    • 谢谢,会检查并通知您。
    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多