AutoCompleteTextView仅在为空时有效

时间:2018-06-30 16:46:43

标签: android kotlin android-edittext autocompletetextview

val autoCompleteAdapter = ArrayAdapter(this,R.layout.simple_dialog_item,data.listOfEncounters)
    postInput.threshold = 2
    postInput.setAdapter(autoCompleteAdapter)
    autoCompleteAdapter.notifyDataSetChanged()

我正在尝试实现这一点:当用户开始使用“ @”显示用户名时,但是... 上面的代码仅在您输入的第一件事是@username时才起作用,否则它将不起作用。它仅在 AutoCompleteTextView 为空时有效。而且我无法添加具有自动完成功能的其他用户名。

编辑:切换到 MultiAutoCompleteTextView 并且有效

我正在使用这样的自定义令牌生成器,而不是逗号令牌生成器

class MyTokenizer:MultiAutoCompleteTextView.Tokenizer{


override fun findTokenStart(text: CharSequence, cursor: Int): Int {
    var i = cursor
    while (i > 0 && text[i - 1] != ' ' && text[i - 1] != '\n') {
        i--
    }
    while (i < cursor && (text[i] == ' ' || text[i] == '\n')) {
        i++
    }
    return i
}

override fun findTokenEnd(text: CharSequence, cursor: Int): Int {
    var i = cursor
    val len = text.length

    while (i < len) {
        if (text[i] == ' ' || text[i] == '\n') {
            return i
        } else {
            i++
        }
    }
    return len
}

override fun terminateToken(text: CharSequence): CharSequence {
    var i = text.length

    while (i > 0 && (text[i - 1] == ' ' || text[i - 1] == '\n')) {
        i--
    }
    if (i > 0 && (text[i - 1] == ' ' || text[i - 1] == '\n')) {
        return text
    } else {
        if (text is Spanned) {
            val sp = SpannableString(text.toString() + " ")
            TextUtils.copySpansFrom(text, 0, text.length,
                    Any::class.java, sp, 0)
            return sp
        } else {
            return text.toString() + " "
        }
    }
}

}

0 个答案:

没有答案