【发布时间】:2019-01-31 06:27:46
【问题描述】:
我正在使用 Android 数据绑定库通过 LiveData 制作反应式视图
我提出一份工作清单的回购请求
var jobsRequest: LiveData<Resource<List<Job>>>
= Transformations.switchMap(position) { repo.getJobsWithStatus(it) }
然后我还有3个基于上面的LiveData,像这样
首先,检查请求是否完成
private val requestComplete: LiveData<Boolean>
= Transformations.map(jobsRequest) {
it.status == Status.SUCCESS || it.status == Status.ERROR
}
接下来,转换为没有资源包装器的作业列表
var jobs: LiveData<List<Job>>
= Transformations.map(jobsRequest) { it.data }
最后,检查该作业列表是否为空
val jobsEmpty: LiveData<Boolean>
= Transformations.map(jobs) { (it ?: emptyList()).isEmpty() }
在布局中,如果请求尚未完成并且作业列表为空并且需要在我的视图模型中使用一个变量来指示这一点,我想在布局中显示一个加载微调器
我已经尝试了下面的代码,但正如预期的那样,它不起作用
val spinnerVisible: LiveData<Boolean>
= Transformations.map(requestComplete) {
!(requestComplete.value ?: false) && (jobsEmpty.value ?: true)
}
根据其他 2 个状态使用 LiveData 变量的正确做法是什么 - 我想将所有逻辑保留在视图模型中,而不是在活动或布局中。
【问题讨论】:
标签: android mvvm kotlin android-databinding android-livedata