【发布时间】:2021-10-29 20:49:41
【问题描述】:
我最近一直在玩 compose,但我遇到了一个我不知道如何正确解决的情况。
我有一个广播组要显示,所以很自然地,我创建了一个如下所示的函数:
@Composable
private fun RadioGroup(
options: List<String>?,
selectedOption: String?,
onOptionSelected: (String) -> Unit
) =
options?.forEach { item ->
Row(
Modifier.padding(top = 16.dp),
verticalAlignment = Alignment.CenterVertically
) {
RadioButton(
selected = (item == selectedOption),
onClick = { onOptionSelected(item) },
)
ClickableText(
text = AnnotatedString(item),
modifier = Modifier.padding(start = 8.dp),
style = TextStyle(fontWeight = FontWeight.Bold),
onClick = {
onOptionSelected(item)
}
)
}
}
我通过观察 livedata 为初始状态调用此函数(提供按钮列表和选定按钮):
val state = viewModel.viewState.observeAsState().value
RadioGroup(
state?.options,
state?.selected,
{ option -> viewModel.onOptionSelected(option) }
)
提供以下数据的 livedata viewState:
class ViewState(val options: List<String>, val selected: String)
但是现在,每次我想更新选定的选项时,我还需要提供初始选项列表,它永远不会改变...... 如何更新选定的选项而不必每次都提供选项列表?由于方法 RadioGroup 不可分割,所以提升必须最低为读,最高为写。
谢谢大家的建议。
【问题讨论】:
-
你好,请添加视图模型实现
-
viewmodel 有一个 init 函数,可以在 livedata 上发布选项列表和默认选择的选项。函数 onOptionSelected(option: String) 也在 livedata 上发布 + 使用该选项做一些事情
-
我需要看
onOptionSelected函数和selected变量定义
标签: android radio-button android-jetpack-compose radio-group