【问题标题】:How to emit() LiveData results to an existing LiveData object?如何将() LiveData 结果发送到现有的 LiveData 对象?
【发布时间】:2019-11-07 10:56:57
【问题描述】:

official Android developer docs 中的协程 LiveData 示例给出了以下使用 emit() 的示例:

val user: LiveData<User> = liveData {
    val data = database.loadUser() // loadUser is a suspend function.
    emit(data)
}

我看到的每个emit() 示例包括这个ProAndroidDev tutorial 在使用emit() 时都会创建一个新的LiveData 对象。如何从已创建的LiveData 对象和emit() 值中获取LiveDataScope?例如

class MyViewModel : ViewModel() {
    private val user: MutableLiveData<User> = MutableLiveData()

    fun getUser(): LiveData<User> {
        return user
    }

    fun loadUser() {
        // Code to emit() values to existing user LiveData object.
    }

非常感谢,非常感谢所有帮助!

【问题讨论】:

  • 没有必要。只需观察片段中的user 即可。这是带有协程的实时数据。
  • @coroutineDispatcher 我将如何处理我想发送另一个网络请求以刷新LiveData 对象的情况?或者我想在更新LiveData 对象之前等待按钮单击的情况?使用我提供的示例只允许更新LiveData 对象一次,此时Fragment 第一次实例化ViewModel。我确定我错过了一些东西,感谢您的帮助!
  • developer.android.com/reference/androidx/lifecycle/… 我猜应该是一个解决方案。
  • @coroutineDispatcher 如果我正在使用Transformations 之一,我该如何继续使用emit()
  • 使用 Flow 而不是 LiveData?

标签: android android-livedata kotlin-coroutines


【解决方案1】:

类似

fun loadUser() {
     user.value = User()
}

通过

收听
 myViewModel.getUser().observe(this, EventObserver { user ->
     // do something with user
 })

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多