1
我从xml加载了大约20,000个字符串,除此之外,它需要非常多的时间,直到应用程序真的让我建议,当我键入Cra
它显示我的第一个建议Valea Crabului
和我字符串中有Craiova
,但稍后会提示。autocompletetextview并不建议我想要什么
AutoCompleteTextView
如何才能向我建议只匹配整个单词的单词?
我从xml加载了大约20,000个字符串,除此之外,它需要非常多的时间,直到应用程序真的让我建议,当我键入Cra
它显示我的第一个建议Valea Crabului
和我字符串中有Craiova
,但稍后会提示。autocompletetextview并不建议我想要什么
AutoCompleteTextView
如何才能向我建议只匹配整个单词的单词?
如果您使用ArrayAdapter
您AutoCompleteTextView
,比在这里你可以看到ArrayAdapter
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java
过滤器的默认实现从内部类的ArrayAdapter
ArrayFilter
:
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-20 07:36:47
@OvidiuLatcu我不使用自定义过滤器,我应该实现一个? – opc0de 2012-07-20 07:37:18
您的意思是Craiova没有在“Cra”输入中提示?即使您在建议列表中向下滚动,也不行?也许阵列的大小可能是一个问题。 – cosmincalistru 2012-07-20 07:44:00