2014-11-02 60 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