0

我有一个 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 上运行良好。

4

0 回答 0