【发布时间】:2019-08-01 17:31:07
【问题描述】:
我有一个将一些图像发送到服务器的 Worker。当 Worker 启动时,我需要将视图状态更改为“进行中”,当 Worker 完成时,我需要将视图状态更改为“已完成”。但是,当我更新 Worker 内的 Room Database 时,我的视图无法理解数据库已更改并且 LiveData 未得到通知。 如果我在 Worker 启动之前进行相同的调用,LiveData 会了解更改并更新我的视图。我遇到的问题是我的视图并不确切知道应该更新 recyclerview 的哪个项目,因此我无法观察视图上的 Worker。我需要在 Worker 内部进行此更新。
--- 已更新代码 ---
片段
viewModel.shortHistoryViewModelList.observe(viewLifecycleOwner, Observer {
binding.viewModel = viewModel
adapter.replace(shortHistories)
binding.executePendingBindings()
scrollToItem(shortHistories)
})
视图模型
private val results: MediatorLiveData<List<ShortHistory>> = MediatorLiveData()
init {
this.state.value = NetworkStateEnum.NONE
results.addSource(repository.get()) {
results.postValue(it)
}
}
val shortHistoryViewModelList: LiveData<List<ShortHistoryViewModel>> =
Transformations.switchMap(results) { shortHistories ->
val mutableLiveData: MutableLiveData<List<ShortHistoryViewModel>> = MutableLiveData()
val list = ArrayList<ShortHistoryViewModel>()
for (shortHistory in shortHistories) {
list.add(ShortHistoryViewModel(shortHistory))
}
mutableLiveData.value = list
mutableLiveData
}
工人
val shortHistory = shortHistoryRepository.get(shipmentId)
shortHistory.digitalReceipt = shortHistory.digitalReceipt?.copy(status = DigitalReceiptStatusEnum.Sending.value)
shortHistoryRepository.insert(shortHistory)
【问题讨论】:
-
添加您的代码,我们无法在不知道您的代码做什么的情况下帮助您。
-
我认为我的代码在这种情况下不会改变任何东西。当我在不同的地方使用相同的代码时,它可以工作。
-
添加相关代码。
-
已更新代码
标签: java android kotlin android-room android-livedata