例如,假设我们有一个产品目录 View ,该 View 具有将产品添加到购物车的选项。
每次用户单击添加到购物车时,都会调用viewModel方法addToCart,如下所示:
//inside viewModel
fun addToCart(item:Item): LiveData<Result> = liveData {
val result = repository.addToCart(item) // loadUser is a suspend function.
emit(result)
}
//inside view
addButton.onClickListener = {
viewModel.addToCart(selectedItem).observe (viewLifecycleOwner, Observer () {
result -> //show result
}
}
例如,添加5个项目后,会发生什么-> View 将在内存中观察到5个livedata对象吗?如果是,何时清理它们?如果是的话,我们是否应该避免使用LiveData Builder进行一次可以多次调用的操作?
最佳答案
您的实现似乎有误!您每次调用LiveData
函数时都会不断返回一个新的addToCard
对象。关于您的第一个问题,这是一个Yes
。
如果要通过liveData正确执行此操作。
// In ViewModel
private val _result = MutableLiveData<Result>()
val result: LiveData<Result>
get() = _result;
fun addToCart(item: Item) {
viewModelScope.launch {
// Call suspend functions
result.value = ...
}
}
// Activity/Fragment
viewModel.result.observe(lifecycleOwner) { result ->
// Process the result
...
}
viewModel.addToCart(selectedItem)
您要做的就是从 Activity 中调用它并处理结果。您也可以为此使用 StateFlow
。它还有一个扩展名asLiveData
,它也可以转换Flow-> LiveData。关于android - livedata builder可以一次执行操作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65455964/