我在我的應用中使用了一個AutoCompleteTextView,它給出了國家名稱的建議。我的自動完成功能將輸入的文本與建議列表中的每個單詞進行匹配。例如,如果我輸入兩個字母「ar」,則我將「沙特阿拉伯」作爲其中一個建議。Android自動填充匹配選項
是否有任何方法使AutoCompleteTextView嘗試匹配僅從第一個單詞開始?即建議必須以輸入的文本開頭,在我之前的例子中,我收到的建議僅爲「亞美尼亞」,「阿根廷」&「Aruba」。
我在我的應用中使用了一個AutoCompleteTextView,它給出了國家名稱的建議。我的自動完成功能將輸入的文本與建議列表中的每個單詞進行匹配。例如,如果我輸入兩個字母「ar」,則我將「沙特阿拉伯」作爲其中一個建議。Android自動填充匹配選項
是否有任何方法使AutoCompleteTextView嘗試匹配僅從第一個單詞開始?即建議必須以輸入的文本開頭,在我之前的例子中,我收到的建議僅爲「亞美尼亞」,「阿根廷」&「Aruba」。
問題是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
中的大部分代碼,但省略了拆分字符串的部分。
您需要編寫一個適配器,它提供這些項目並實現Filterable接口。請參閱this gist。
基本上,您需要使用abc.startsWith(xyz)
進行檢查,並根據此結果過濾結果。
非常感謝您的幫助,我寫了一個自定義適配器並且它工作正常。 – 2014-11-02 23:17:37
您可以將其標記爲已接受嗎?謝謝! – 2014-11-03 08:11:41
這兩個答案都是完美的,基本相同,我只是接受bmat的回答,因爲他指出了導致我的問題的原因,他的例子是針對我的問題的。再次非常感謝你,我感謝你的努力。 – 2014-11-03 10:17:59
非常感謝你的男人!這是一個很大的幫助,我真的很感激你花時間寫完整個例子。 – 2014-11-02 23:21:48