我有一个 LazyColumn,其项目有一个 RadioButton 和一个文本。
@Composable
private fun UserList(
modifier: Modifier,
users: List<User>,
selectedUser: User?,
onUserSelected: (User) -> Unit
) { // <-- This gets called again with the selectedUser
LazyColumn(modifier = modifier) { // <-- This also gets called again
items(
items = users,
key = { it.id }
) { user ->
Row( // <-- This never gets called
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
.height(48.dp)
.selectable(user.id == selectedUser?.id) {
onUserSelected(user)
}
) {
RadioButton(
selected = user.id == selectedUser?.id,
onClick = { onUserSelected(user) }
)
Text(
text = user.phone,
style = MaterialTheme.typography.subtitle1.merge(),
modifier = Modifier.padding(start = 16.dp)
)
}
}
}
}
当我单击一个项目时,onUserSelected
会调用侦听器来更改 ViewModel 中的状态。并且还使这个可组合重组。但是 RadioButton 永远不会被选中。
调试后,我发现:UserList
当它的参数selectedUser
发生变化时,可组合对象会被重新组合。但是,Row
可组合对象永远不会被重新组合。
另一个观察结果是,如果我先滚动项目然后单击任何项目,这绝对可以正常工作并且单选按钮被选中。
此外,这在 Beta07 上运行良好。