我有一个 LazyColumn,它的项目有一个 RadioButton 和一个 Text。
@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 上运行良好。