【问题标题】:Textfield listener on Jetpack compose?Jetpack compose 上的文本字段侦听器?
【发布时间】:2025-12-11 06:00:01
【问题描述】:

您好,我正在尝试使用一个文本字段,当值发生变化时,我希望它执行一个函数,根据输入的文本过滤掉项目列表?

它似乎什么也没做。

我尝试在 onValueChanges 中添加 searchFilter 函数调用,但在单击文本字段尝试输入内容时,键盘根本没有弹出

  val textState = remember { mutableStateOf(TextFieldValue()) }

                   TextField(
                        value = textState.value,
                        onValueChange = {
                            textState.value = it
                            viewModel.searchCharacter(textState.value.text)
                        }
                    )

如果我删除 viewModel.searchCharacter(textState.value.text) 并将其添加到文本字段之外,我现在可以在实际文本字段中输入内容,但它永远不会调用 searchCharacter 函数。

我的搜索字符方法只是一个应用过滤器的列表

fun searchCharacter(name: String) {
    characterList.value?.let {
        characterList.value?.let { characterList ->
            characterList.filter {
                it.name.contains(name)
            }
        }
    }
}

【问题讨论】:

    标签: android kotlin android-jetpack-compose


    【解决方案1】:

    代码中的任何内容都不应阻止键盘弹出。您是否尝试过再次运行该应用程序?我遇到了撰写 TextFields 无法可靠地打开键盘的问题。

    您的 searchCharacter 函数没有意义。

    这里有一个更好的方法:

    fun searchCharacter(name: String) {
      characterList.value.filter { it.name.contains(name) }?.let { filtered ->
        characterList.value = filtered
      }
    }
    

    【讨论】: