2014-11-02 59 views
2

我在我的應用中使用了一個AutoCompleteTextView,它給出了國家名稱的建議。我的自動完成功能將輸入的文本與建議列表中的每個單詞進行匹配。例如,如果我輸入兩個字母「ar」,則我將「沙特阿拉伯」作爲其中一個建議。Android自動填充匹配選項

是否有任何方法使AutoCompleteTextView嘗試匹配僅從第一個單詞開始?即建議必須以輸入的文本開頭,在我之前的例子中,我收到的建議僅爲「亞美尼亞」,「阿根廷」&「Aruba」。

回答

4

問題是ArrayAdapter中的Filter執行首先檢查字符串是否以搜索約束開始,然後分割字符串並檢查每個單詞。

從ArrayAdapter.java:

// 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; 
     } 
    } 
} 

正如丹尼爾提到的,你將需要實現自己的適配器實現Filterable。我創建了一個可以實現您正在查找的行爲的示例。 You can find it here.它重用ArrayAdapter中的大部分代碼,但省略了拆分字符串的部分。

+0

非常感謝你的男人!這是一個很大的幫助,我真的很感激你花時間寫完整個例子。 – 2014-11-02 23:21:48

0

您需要編寫一個適配器,它提供這些項目並實現Filterable接口。請參閱this gist

基本上,您需要使用abc.startsWith(xyz)進行檢查,並根據此結果過濾結果。

+0

非常感謝您的幫助,我寫了一個自定義適配器並且它工作正常。 – 2014-11-02 23:17:37

+0

您可以將其標記爲已接受嗎?謝謝! – 2014-11-03 08:11:41

+0

這兩個答案都是完美的,基本相同,我只是接受bmat的回答,因爲他指出了導致我的問題的原因,他的例子是針對我的問題的。再次非常感謝你,我感謝你的努力。 – 2014-11-03 10:17:59