Я использую библиотеку привязки данных 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)
}
Как правильно использовать переменную LiveData на основе состояния двух других - я хочу сохранить всю логику в модели представления, а не в действии или макете.