You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TextWatcher自动补全仅首个输入字符生效,后续无响应问题求助

问题分析与解决

嘿,我一眼就瞅出问题在哪儿了!你的代码在用户第一次输入时能正常过滤标签,但后续输入没更新建议列表,核心原因是每次输入新内容时,你没有先清空适配器里已有的旧标签,而是直接追加新的过滤结果。

举个例子:当用户输入"J"时,适配器里会加入"John Smith"、"Jesse Albright";接着用户输入"Jo",你又把"John Smith"加进去,此时适配器里其实有三个条目(两个John+一个Jesse),但RecyclerView显示的还是旧的列表,看起来就像没更新一样。

修改后的代码

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.isEmpty()) {
            tagSuggestionRecycler.visibility = View.GONE
            tagsFiltredAdapter.clear()
        } else {
            // 先清空适配器里的旧内容!这是关键
            tagsFiltredAdapter.clear()
            val relevantTags: List<String> = tags.filter { it.contains(userInput, ignoreCase = true) }
            // 加忽略大小写参数,体验更友好
            if (relevantTags.isNotEmpty()) {
                tagSuggestionRecycler.visibility = View.VISIBLE
                relevantTags.forEach { tag ->
                    tagsFiltredAdapter.add(SingleTagSuggestion(tag))
                }
            } else {
                // 无匹配标签时隐藏列表
                tagSuggestionRecycler.visibility = View.GONE
            }
        }
    }

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

关键修改点说明

  1. 每次过滤前清空适配器:在else分支开头先调用tagsFiltredAdapter.clear(),确保旧标签被完全移除,只保留当前输入对应的新结果。
  2. 优化可见性逻辑:把设置RecyclerView可见性的代码移到循环外,同时判断过滤后的列表是否为空,无匹配项时也隐藏列表,交互更连贯。
  3. 可选体验优化:在contains方法中加入ignoreCase = true,让用户输入小写也能匹配大写开头的标签,提升使用体验。

这样修改后,用户每输入一个字符,适配器都会先清空旧内容再添加新的过滤结果,RecyclerView就能实时更新显示正确的标签建议啦!

内容的提问来源于stack exchange,提问作者Tsabary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:34:51