2012-07-20 130 views
1

我从xml加载了大约20,000个字符串,除此之外,它需要非常多的时间,直到应用程序真的让我建议,当我键入Cra它显示我的第一个建议Valea Crabului和我字符串中有Craiova,但稍后会提示。autocompletetextview并不建议我想要什么

AutoCompleteTextView如何才能向我建议只匹配整个单词的单词?

+2

你使用自定义过滤器吗?你可以发布一些代码吗? – 2012-07-20 07:36:47

+0

@OvidiuLatcu我不使用自定义过滤器,我应该实现一个? – opc0de 2012-07-20 07:37:18

+0

您的意思是Craiova没有在“Cra”输入中提示?即使您在建议列表中向下滚动,也不行?也许阵列的大小可能是一个问题。 – cosmincalistru 2012-07-20 07:44:00

回答

3

如果您使用ArrayAdapterAutoCompleteTextView,比在这里你可以看到ArrayAdapterhttps://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter.java

过滤器的默认实现从内部类的ArrayAdapterArrayFilter

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 { 

所以您的过滤器将增加开始与结果的顶部,最相关的过滤结果您建议的字符串值。