我正在尝试将枚举转换为字符串列表,以便在下拉菜单中使用,然后被选择并保存。
这是枚举和转换方法:
enum class ExerciseType(val exercise: String) {
CHEST("Chest"),
LEG("Leg"),
ARMS("Arms"),
CORE("Core"),
LOWER_BODY("Lower Body"),
UPPER_BODY("Upper Body")
}
fun getExerciseTypesAsStrings(): List<String> {
return ExerciseType.values().map { it.exercise }
}
在这里,我获取转换后的枚举数组,并打算在 mutableStateOf
函数中使用。但这里出现了问题,编译器提示错误:“类型 'TypeVariable(T)' 没有 'getValue(Nothing?, KProperty<*>)' 方法,因此它不能作为委托”。
val exerciseTypeValues = getExerciseTypesAsStrings().toTypedArray() // 枚举转为array<String>
var exerciseType by rememberSaveable { mutableStateOf(exerciseTypeValues[0]) }
问题出在这一行:"var exerciseType by rememberSaveable..."
我计划在以下可组合函数中使用这个值:
@Composable
fun ExerciseTypeInput(
values: ArrayList<String>,
modifier: Modifier,
updateExerciseType: (String) -> Unit
) {
ButtonSpinner(
items = values,
modifier = modifier,
itemClick = {
updateExerciseType(it)
}
)
}
在这个下拉框中,用户可以选择一个值(更新所选的锻炼类型),用于持久化存储。
我不太清楚自己在哪里出错,因为我在遵循一个指南,其中几乎逐字照写了这段代码,只是他们从res文件夹中的ArrayStringResource获取字符串数组,如下所示:
var values = stringArrayResource(R.array.gender_array)
val genderValues = values.copyOfRange(1, values.size)
var gender by rememberSaveable { mutableStateOf(genderValues[0] ) }
我希望你能看出这两个实现是如何相似的(它们都获取一个字符串数组,然后使用 mutableState
来记住数组中的位置)。
然而第二个示例可以正常工作,我不明白为什么。
如果按照错误提示添加“getValue”和“setValue”方法,我的应用会产生这样的结果: