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
在更改
sortBy

listVoiceBySort
中的值后,将自动更新其值。当值更改时,将不会使用新值再次调用
listVoiceBySort
。您必须使用
observe
订阅更改。如何修复代码?LiveData仅用于UI组件监视更改。这里有一些更基本的设计问题。看起来这个LiveData可能有一个枚举值,指示存储库应该如何排序,或者其他什么?那么,您当前用于更改此实时数据的任何内容都应该直接调用存储库函数。请尝试使用带有回调的
observeforver
,这样每当更新值时,您都会收到一个回调,并且您可以向调用者发送一个带有
listVoiceBySort()
最新结果的回调
val listVoiceBySort: LiveData<List<MVoice>> = sortBy.map { mDBVoiceRepository.listVoiceBySort(it) }