【问题标题】:Android Compose - Radiogroup/RadioButton initial state vs changesAndroid Compose - Radiogroup/RadioButton 初始状态与更改
【发布时间】: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


【解决方案1】:

一个简单的解决方案是为每个参数设置 2 个单独的状态:

val options = viewModel.options.observeAsState().value
val selection = viewModel.selection.observeAsState().value

瞧 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2012-07-15
    • 1970-01-01
    • 2017-09-01
    • 2012-01-06
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多