文本观察器自动完成仅适用于输入的第一个字符然后停止
Text watcher auto complete only works for first character typed and then stops
所以我正在使用文本观察器向用户显示标签建议。
目前我正在使用一个虚拟标签列表。当用户开始键入时,代码应创建另一个标签列表,该列表只是第一个列表的对象,根据它们是否包含用户当前键入的字符序列过滤。
第一个字符效果很好,但随着用户不断输入,列表不再改变。
这是我的代码:
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) {
}
})
您需要在 onTextChanged
.
的每次调用中清除 tagsFiltredAdapter
目前,当输入第一个字符时,您的筛选列表包含正确的结果,而当输入更多字符时,列表的大小应该减小以匹配新字符。相反,您只需将项目添加到列表中。
所以我正在使用文本观察器向用户显示标签建议。 目前我正在使用一个虚拟标签列表。当用户开始键入时,代码应创建另一个标签列表,该列表只是第一个列表的对象,根据它们是否包含用户当前键入的字符序列过滤。
第一个字符效果很好,但随着用户不断输入,列表不再改变。
这是我的代码:
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) {
}
})
您需要在 onTextChanged
.
的每次调用中清除 tagsFiltredAdapter
目前,当输入第一个字符时,您的筛选列表包含正确的结果,而当输入更多字符时,列表的大小应该减小以匹配新字符。相反,您只需将项目添加到列表中。