【发布时间】:2021-11-16 05:42:03
【问题描述】:
做 jetpack compose codelab(state),在 ViewModel 中有些东西我认为没有意义。
我很困惑,有一些问题。这是来自codelab的代码
VieModel
class TodoViewModel : ViewModel() {
private var _todoItems = MutableLiveData(listOf<TodoItem>())
val todoItems: LiveData<List<TodoItem>> = _todoItems
// ...
}
第一
这是我的想法。todoItems 是包含 MutableLiveData 的变量,其中包含 TodoItems 列表。
而todoItems 是类型为LiveData<List<TodoItem>> 并包含_todoItems 的值
在这个流程中,为什么todoItems 有那个类型?
为什么MutableLiveData(listOf<TodoItem>()) 的第一个类型等价于LiveData<List<TodoItem>>?
第二
第二个问题是关于使用带有变量的视图模型。
这是代码。
@Composable
private fun TodoActivityScreen(todoViewModel: TodoViewModel) {
val items: List<TodoItem> by todoViewModel.todoItems.observeAsState(listOf())
TodoScreen(
items = items,
onAddItem = { todoViewModel.addItem(it) },
onRemoveItem = { todoViewModel.removeItem(it) }
)
}
来自 ViewModel 的items 只是List<TodoItem>。
以及为什么类型返回List<TodoItem>?
【问题讨论】:
标签: kotlin syntax android-jetpack-compose