android - Jetpack 撰写状态没有得到观察
问题描述
我正在为 jetpack compose 中的基本 Todo 应用程序编写代码,我知道 mutablestateof() 负责重新组合 ui,但是 Lazycolumn 在从列表中删除项目后没有得到更新,尽管它在我关闭应用程序和再次启动时得到更新它
待办事项列表屏幕
@Composable
fun TodoListScreen(
viewModel: TodoViewModel,
onClick: () -> Unit
) {
val state = rememberLazyListState()
var items = remember {
viewModel.todoItems
}
viewModel.getTodos()
Column(horizontalAlignment = Alignment.CenterHorizontally) {
AddNewTodoButton(onClick = onClick)
LazyColumn(state = state) {
items(items.value) { item ->
TodoItem(viewModel, item)
}
}
}
}
TodoItem // 单击一个 Todo 元素会从数据库中删除
@Composable
fun TodoItem(
viewModel: TodoViewModel,
todoItem: TodoEntity
) {
Card(
modifier = Modifier
.padding(8.dp)
.height(100.dp)
.fillMaxWidth(),
elevation = 8.dp,
shape = RoundedCornerShape(10.dp)
) {
Row(modifier = Modifier
.padding(8.dp)
.clickable {
viewModel.deleteTodo(todoItem)
}
) {
Text(
text = todoItem.description,
modifier = Modifier
.padding(start = 8.dp)
.align(Alignment.CenterVertically)
)
}
}
}
视图模型
@HiltViewModel
class TodoViewModel @Inject constructor(val repo: TodoRepo):ViewModel() {
val todoItems = mutableStateOf<List<TodoEntity>>(listOf())
fun getTodos(){
viewModelScope.launch {
todoItems.value =( repo.getTodos())
}
}
fun addTodo(todo:TodoEntity){
viewModelScope.launch {
repo.addTodo(todo)
}
}
fun deleteTodo(todo:TodoEntity){
viewModelScope.launch {
repo.deleteTodo(todo)
}
}
}
解决方案
推荐阅读
- dockerfile - wget:无法解析主机地址“github.com”
- ansible - (cisco.asa.asa_command) 模块不支持的参数:上下文、在提供程序中找到的密码
- python - Python同时初始化和输入
- keras - 如何操作 Keras 层?:立体视觉成本量
- javascript - 如何在 babel 中使用 tsconfig.json
- java - 使用简单的 thymeleaf Spring 启动应用程序显示 HTML 时出错
- javascript - 如何在特定类别中创建频道?
- inno-setup - 使用 shell 扩展无法进行 Inno Setup 彻底卸载
- testing - Groovy spock 测试没有正确存根——接收到 null
- amazon-web-services - 如何描述“已删除”的 AMI?