Android 当LiveData参数';函数的s值在Kotlin中已更改?
Android 当LiveData参数';函数的s值在Kotlin中已更改?,android,kotlin,Android,Kotlin,sortBy是一个LiveData变量,它是函数mdbvoicepository.listVoiceBySort()的参数 更改sortBy的值时,listVoiceBySort()是否会自动获取最新结果 如果没有,我如何修复代码以在更改sortBy的值时自动获取listVoiceBySort()的最新结果 代码 class HomeViewModel(private val mDBVoiceRepository: DBVoiceRepository) : ViewModel() {
sortBy
是一个LiveData变量,它是函数mdbvoicepository.listVoiceBySort()
的参数
更改sortBy
的值时,listVoiceBySort()是否会自动获取最新结果
如果没有,我如何修复代码以在更改sortBy
的值时自动获取listVoiceBySort()的最新结果
代码
class HomeViewModel(private val mDBVoiceRepository: DBVoiceRepository) : ViewModel() {
private val _sortBy = MutableLiveData<ESortBy>(ESortBy.DateDesc)
val sortBy: LiveData<ESortBy> = _sortBy
fun listVoiceBySort(): LiveData<List<MVoice>> = mDBVoiceRepository.listVoiceBySort(sortBy.value!!)
}
class HomeViewModel(private val mDBVoiceRepository:DBVoiceRepository):ViewModel(){
private val_sortBy=MutableLiveData(ESortBy.DateDesc)
val sortBy:LiveData=\u sortBy
有趣的listVoiceBySort():LiveData=mDBVoiceRepository.listVoiceBySort(sortBy.value!!)
}
您需要使用转换。映射
:
val listVoiceBySort: LiveData<List<MVoice>> = Transformations.map(sortBy) { mDBVoiceRepository.listVoiceBySort(it) }
Transformations.map
通过将传递的函数应用于源上的每个值集,返回从输入源LiveData
映射的LiveData
。
这意味着listVoiceBySort
在更改sortBylistVoiceBySort
中的值后,将自动更新其值。当值更改时,将不会使用新值再次调用listVoiceBySort
。您必须使用observe
订阅更改。如何修复代码?LiveData仅用于UI组件监视更改。这里有一些更基本的设计问题。看起来这个LiveData可能有一个枚举值,指示存储库应该如何排序,或者其他什么?那么,您当前用于更改此实时数据的任何内容都应该直接调用存储库函数。请尝试使用带有回调的observeforver
,这样每当更新值时,您都会收到一个回调,并且您可以向调用者发送一个带有listVoiceBySort()
最新结果的回调
val listVoiceBySort: LiveData<List<MVoice>> = sortBy.map { mDBVoiceRepository.listVoiceBySort(it) }