2012-07-20 77 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 { 

所以您的過濾器將增加開始與結果的頂部,最相關的過濾結果您建議的字符串值。