I'm beginner in Jetpack Compose, so I don't know how can I get value from Radio group that I created.

This is my Radio group composable function:

@Composable
fun KindRadioGroup(
    mItems: List<String>
) {
    val mRememberObserver = remember { mutableStateOf("") }
    CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
        Column(
            modifier = Modifier.fillMaxWidth(),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            mItems.forEach { item ->
                Row(
                    verticalAlignment = Alignment.CenterVertically
                ) {

                    RadioButton(
                        selected = mRememberObserver.value == item,
                        onClick = { mRememberObserver.value = item },
                        enabled = true,
                        colors = RadioButtonDefaults.colors(
                            selectedColor = Color.Magenta
                        )
                    )//RadioButton
                    Text(text = item, modifier = Modifier.padding(start = 8.dp))
                }//Row
            }
        }//Column
    }

}

Is that ok for creating a Radio group or you have better idea?

This is the way that I use that composable function:

val kinds = listOf(stringResource(id = R.string.req_impor), stringResource(id = R.string.nonreq_impor),
    stringResource(id = R.string.req_nonimpor))
KindRadioGroup(mItems = kinds)

By the way if it's ok, how can I get value from selected radio button?

推荐答案

Use state hoisting and move the selection state outside the composable.

Sample code

@Composable
fun KindRadioGroupUsage() {
    val kinds = listOf("Option 1", "Option 2", "Option 3")
    val (selected, setSelected) = remember { mutableStateOf("") }
    Column {
        KindRadioGroup(
            mItems = kinds,
            selected, setSelected
        )
        Text(
            text = "Selected Option : $selected",
            textAlign = TextAlign.Center,
            modifier = Modifier.fillMaxWidth(),
        )
    }
}

@Composable
fun KindRadioGroup(
    mItems: List<String>,
    selected: String,
    setSelected: (selected: String) -> Unit,
) {
    CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
        Column(
            modifier = Modifier.fillMaxWidth(),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            mItems.forEach { item ->
                Row(
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    RadioButton(
                        selected = selected == item,
                        onClick = {
                            setSelected(item)
                        },
                        enabled = true,
                        colors = RadioButtonDefaults.colors(
                            selectedColor = Color.Magenta
                        )
                    )
                    Text(text = item, modifier = Modifier.padding(start = 8.dp))
                }
            }
        }
    }
}

Android相关问答推荐

道查询注释部分房间表名称

如何处理穿戴构图上的长点击事件?

我无法在底部导航栏中正确导航-Android底部导航视图

Kotlin为多个控件设置一个侦听器

我无法连接到信号机

如何检测低性能 Android 设备进行条件动画渲染?

Andorid Studio编译器如何自动为变量editText生成mutableStateOf("")的方法名?

如何知道我的应用程序的新版本是否显示广告?

如何在 Jetpack Compose 中的特定位置绘制图像

Jetpack Compose 部分或开放侧边框

找不到(包名称).在以下位置搜索:

Composable 不会在单击按钮时重新组合

插入查询室 OnConflictStrategy.REPLACE

如何在 Android Studio 中创建新的可组合函数?

优化 Room 数据库迁移

在开发过程中我应该把 mp4 文件放在哪里?

现代Android中的后台处理

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时

如何在 Kotlin 的片段中制作图像列表?

如何设置 Android Auto 媒体应用按钮 colored颜色