例如,假设我们有一个产品目录 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/

10-12 03:44