Text Watcher自动完成功能仅适用于第一个输入的字符,然后停止

时间:2019-03-19 10:55:16

标签: android kotlin textwatcher android-textwatcher

因此,我正在使用文本观察器来显示用户对标记的建议。 目前,我正在使用虚拟列表标签。当用户开始键入内容时,代码应创建另一个标签列表,该标签列表只是根据它们是否包含用户当前正在键入的字符序列进行过滤的第一个列表对象。

它对于第一个字符非常有用,但是随着用户不断输入,列表不再更改。

这是我的代码:

 val tags = listOf(
        "John Smith",
        "Kate Eckhart",
        "Emily Sun",
        "Frodo Baggins",
        "Yanay Zabary",
        "Sze Lok Ho",
        "Jesse Albright",
        "Shayna something",
        "Makena Lawrence"
    )

        questionTagsInput.addTextChangedListener(object : TextWatcher {
        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

            val userInput = s.toString()

            if (userInput == "") {
                tagSuggestionRecycler.visibility = View.GONE
                tagsFiltredAdapter.clear()


            } else {
                val relevantTags: List<String> = tags.filter { it.contains(userInput) }

                for (t in relevantTags) {
                    tagSuggestionRecycler.visibility = View.VISIBLE
                    tagsFiltredAdapter.add(SingleTagSuggestion(t))
                }

            }

        }


        override fun afterTextChanged(s: Editable?) {
        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

    })

1 个答案:

答案 0 :(得分:2)

每次调用preg_match("/^[a-zA-Z\s]+$/"时,您需要清除 tagsFiltredAdapter
当前,在键入第一个字符时,过滤后的列表包含正确的结果,并且在键入更多字符时,列表的大小应减小以匹配新字符。而是将项目添加到列表中。