我在我的应用中使用了一个AutoCompleteTextView,它给出了国家名称的建议。我的自动填充功能将输入的文本与建议列表中的每个单词相匹配。例如,如果我输入两个字母" ar",我得到"沙特阿拉伯"作为建议之一。
有没有办法让AutoCompleteTextView尝试仅从第一个单词开始匹配?即建议必须从输入的文本开始,如果我之前的例子,我得到的建议像"亚美尼亚","阿根廷" &安培; "阿鲁巴"仅
答案 0 :(得分:4)
问题是Filter
ArrayAdapter
实现首先检查字符串是否以搜索约束开头,然后拆分字符串并检查每个单词。
来自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;
}
}
}
正如Daniel所说,你需要实现自己的实现Filterable
的适配器。我已经创建了一个实现您正在寻找的行为的示例。 You can find it here.它重用了ArrayAdapter
中的大部分代码,但省略了拆分字符串的部分。
答案 1 :(得分:0)
您需要编写一个提供项目的适配器,并实现Filterable接口。
要在适配器中使用Filterable,请参阅this gist。
基本上您需要使用abc.startsWith(xyz)
进行检查,并根据该结果过滤结果。