1

我正在从 xml 加载大约 20,000 个字符串,除此之外,应用程序真正提出建议需要很长时间,当我键入Cra它时,它会显示第一个建议Valea Crabului并且我Craiova在字符串中,但稍后会建议。

怎么能AutoCompleteTextView只建议我匹配整个单词的单词?

4

1 回答 1

3

如果您使用ArrayAdapter的是, 则在这里您可以看到https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.javaAutoCompleteTextView的过滤器的默认实现ArrayAdapter

从内部ArrayFilterArrayAdapter

for (int i = 0; i < count; i++) {
                final T value = values.get(i);
                final String valueText = value.toString().toLowerCase();

                // First match against the whole, non-splitted value
                if (valueText.startsWith(prefixString)) {
                    newValues.add(value);
                } else {
                    final String[] words = valueText.split(" ");
                    final int wordCount = words.length;

                    // Start at index 0, in case valueText starts with space(s)
                    for (int k = 0; k < wordCount; k++) {
                        if (words[k].startsWith(prefixString)) {
                            newValues.add(value);
                            break;
                        }
                    }
                }
            }

您看到过滤器不会按您需要的相关性对匹配的项目进行排序,您必须为您的适配器编写自己的过滤器。

反而

                // First match against the whole, non-splitted value
                if (valueText.startsWith(prefixString)) {
                    newValues.add(value);
                } else {

你可能需要使用

                // First match against the whole, non-splitted value
                if (valueText.startsWith(prefixString)) {
                    newValues.add(0, value);
                } else {

因此您的过滤器将在结果顶部添加以您建议的字符串开头的值作为最相关的过滤器结果。

于 2012-07-20T07:54:15.310 回答