Android自动填充匹配选项
我在我的应用中使用了一个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