带有 RadioButton 的 LazyColumn 项目

时间:2021-06-13 18:23:21

标签: kotlin android-jetpack android-jetpack-compose android-jetpack-compose-list

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

0 个答案:

没有答案