【发布时间】:2020-06-27 13:56:38
【问题描述】:
我有一个ViewModel 处理显示transactions 和transactionSummary LiveData
// Transactions
val transactions: LiveData<List<Transaction>> = getTransactionByDateUseCase
.getTransactionsByDate(dateRange.startDate, dateRange.endDate)
// Transaction Summary
private var _transactionsSummary = MutableLiveData<TransactionSummary>()
val transactionsSummary: LiveData<TransactionSummary> = _transactionsSummary
transactions 来自 Room,它返回 LiveData<T>,与 transactionSummary 类似,但有一个转换过程来获取交易摘要为 income 和 expense。
以下是改造过程:
private fun getTransactionsSummary(dateRange: DateRange): LiveData<TransactionSummary> {
return Transformations.map(
getTransactionByDateUseCase.getTransactionsByDate(dateRange.startDate, dateRange.endDate)
) { data ->
getTransactionSummaryUseCase.transactions = data
val summary = getTransactionSummaryUseCase.getSummaries(dateRange)
summary
}
}
但是,当我从 Fragment 请求更新时,transactionSummary 总是返回 NULL
getFetchTransactionViewModel().updateTransactionSummary(selectedDateRange)
这是我在ViewModel中的更新函数:
fun updateTransactionSummary(dateRange: DateRange) {
_transactionsSummary.value = getTransactionsSummary(dateRange).value
}
我这样观察transactionSummary:
getFetchTransactionViewModel().transactionsSummary.observe(this, Observer {
textViewIncome.text = it.totalIncome.formatCurrency(isVisibleCurrency = true)
textViewExpense.text = it.totalExpense.formatCurrency(isVisibleCurrency = true)
textViewBalance.text = (it.totalIncome - it.totalExpense).formatCurrency(isVisibleCurrency = true)
})
是否有遗漏的步骤或错误的实现?
谢谢
【问题讨论】:
-
_transactionsSummary.value = getTransactionsSummary(dateRange).valuemap 的用途
标签: android kotlin android-livedata android-viewmodel android-livedata-transformations