【发布时间】:2021-11-20 14:42:05
【问题描述】:
我有一个专业列表供用户查看。在用户对他们的选择感到满意后,我将收集所选复选框的信息并将这些专业保存在用户的个人资料中。
但是,当我点击任何复选框时,视图模型中的状态会发生变化,但复选框仍处于未选中状态。
专业列表
@Composable
fun SpecialtyList(
viewModel: SpecialtyListViewModel = hiltViewModel(),
navController: NavController
) {
LazyColumn(modifier = Modifier.fillMaxSize()) {
item {
viewModel.specialtyList.value.forEach { specialty ->
Row(
modifier = Modifier
.fillMaxWidth()
.padding(10.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = specialty.isSelected,
onCheckedChange = {
specialty.isSelected = it
},
colors = CheckboxDefaults.colors(MaterialTheme.colors.primary)
)
Text(
text = specialty.name,
modifier = Modifier
.padding(horizontal = 10.dp)
)
}
}
}
}
}
专业视图模型
@HiltViewModel
class SpecialtyListViewModel @Inject constructor() : ViewModel() {
// HARD-CODED PROPERTIES
val specialtyList = mutableStateOf(
mutableListOf(
Specialty(name = "Emergency Medicine", isSelected = false),
Specialty(name = "Forensic Medicine", isSelected = false),
Specialty(name = "General Practitioner", isSelected = false)
)
}
专业模特
data class Specialty(
val name: String,
var isSelected: Boolean
)
【问题讨论】:
-
现在你的
LazyColumn并不懒惰,因为你在一个item中显示所有行。相反,您可以使用items(viewModel.specialtyList.value)或itemsIndexed(viewModel.specialtyList.value)(因为根据我的回答您需要索引)。
标签: android android-jetpack-compose android-checkbox