我是Jetpack Compose的初学者,所以我不知道如何才能从我创建的Radio Group中获得价值.

这是我的电台组可组合函数:

@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
    }

}

这可以创建一个广播组吗?还是你有更好的主意?

这是我使用可组合函数的方式:

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

顺便问一下,如果可以,我如何从选中的单选按钮中获取值?

推荐答案

使用state hoisting并将 Select 状态移到可合成对象之外.

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相关问答推荐

错误:无法解析Symbol@style/Theme. Androidstudio in AndroidManifest.html for Kotlin Android Development''

理解修饰符<;方法>;与修饰符<;方法>;:效果和行为解释(Android开发者Jetpack Compose)

图像在Android Studio中显示,但不在设备中显示

Android Studio -未显示布局预览(不推荐使用安全管理器)

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

Android-交叉引用表中的ForeignKey用于什么?

如何共享没有';t是否存在?(仅信息)在Android?

从不可组合回调打开可组合屏幕

如何将 Room Persistence 依赖项正确添加到我的 Jetack Compose Android 应用程序

我需要在房间数据库中保留旧的自动迁移行吗?

为什么第二个代码可以安全地在 map 中进行网络调用,因为它已被缓存?

将 React Native 应用程序背景带到前台

具有数据库和升级潜力的移动应用程序开发(Android)供朋友使用

NFC getNdefMessage 在 Android 13 上写入标签后返回 null

系统导航栏在某些场景下应用了深色效果

在 theme.xml 中使用 android:autoCompleteTextViewStyle

Android活动系统导航栏 colored颜色 ?

可扩展性 Qt 5.15 Android

多个项目 react-native android 构建错误

使用协程访问数据库