Android自动填充匹配选项

时间:2014-11-02 19:08:22

标签: android autocomplete

我在我的应用中使用了一个AutoCompleteTextView,它给出了国家名称的建议。我的自动填充功能将输入的文本与建议列表中的每个单词相匹配。例如,如果我输入两个字母" ar",我得到"沙特阿拉伯"作为建议之一。

有没有办法让AutoCompleteTextView尝试仅从第一个单词开始匹配?即建议必须从输入的文本开始,如果我之前的例子,我得到的建议像"亚美尼亚","阿根廷" &安培; "阿鲁巴"仅

2 个答案:

答案 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)进行检查,并根据该结果过滤结果。