有没有一种方法可以将var toyList设计为ViewModel中的LiveData <List <ToyEntry >>?

问题描述

以下代码来自project

作者在MainViewModel中将var toyList设计为LiveData<List<ToyEntry>>?

我认为如果将var toyList设计为LiveData<List<ToyEntry>>会更好,该怎么办?

class MainViewModel(application: Application) : AndroidViewModel(application) {  
    var toyList: LiveData<List<ToyEntry>>? = null
        get() {
            return field ?: mRepo.toyList.also { field = it }
        }
    ...
}


class ToyRepository private constructor(private val mDatabase: ToyDatabase,private val mExecutors: AppExecutors) {
    val toyList: LiveData<List<ToyEntry>>
        get() = mDatabase.toyDao().allToys
    ...
}



interface ToyDao {
    @get:Query("SELECT * FROM toys")
    val allToys: LiveData<List<ToyEntry>>
    ...
}

解决方法

如果要使用不可为空的LiveData来更改可为空的LiveData,请使用相同的方法观察另一个LiveData,然后可以使用转换:

val toyList: LiveData<List<ToyEntry>> = Transformations.map(mRepo.toyList) {
    it 
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...