Jetpack Compose TextField获得焦点输入时清空原有值问题咨询
你遇到的这个问题是Jetpack Compose 1.0.0-beta07、1.0.0-beta08两个版本的官方原生bug,和你的代码实现逻辑无关。
问题原因
该版本中TextField的状态同步逻辑与焦点回调逻辑存在耦合错误,当同层级多个TextField使用weight修饰符分配宽度时,切换焦点会错误触发输入内容重置逻辑,导致前一个焦点会话内输入的内容被清空。
修复方案
方案1(推荐)
升级Jetpack Compose版本到1.0.0-rc01及以上,官方已经在后续版本中修复了该bug,升级后无需修改原有代码即可正常运行。
方案2(临时规避,不升级版本可用)
两种实现二选一即可:
- 将状态声明的
remember替换为rememberSaveable,持久化输入状态避免被错误重置:
var wordA by rememberSaveable { mutableStateOf("") } var wordB by rememberSaveable { mutableStateOf("") }
- 给每个TextField添加唯一的key标识,强制Compose区分不同输入框的状态节点:
TextField( value = wordA, onValueChange = { wordA = it }, enabled = true, modifier = Modifier.weight(1f).key("text_field_a") ) TextField( value = wordB, onValueChange = { wordB = it }, enabled = true, modifier = Modifier.weight(1f).key("text_field_b") )
内容的提问来源于stack exchange,提问作者Luke Needham
相关产品推荐
相关产品推荐

