Le sortBy est une variable LiveData, et c'est le paramètre de la fonction mDBVoiceRepository.listVoiceBySort().

listVoiceBySort() obtiendra-t-il automatiquement le dernier résultat lorsque la valeur de sortBy est modifiée ?

Sinon, comment puis-je corriger le code pour obtenir le dernier résultat de listVoiceBySort() automatiquement lorsque la valeur de sortBy est modifiée ?

Code

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!!)
}
0
HelloCW 7 sept. 2020 à 05:18

1 réponse

Meilleure réponse

Vous devez utiliser Transformations.map :

val listVoiceBySort: LiveData<List<MVoice>> = Transformations.map(sortBy) { mDBVoiceRepository.listVoiceBySort(it) }

Ou avec "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"

val listVoiceBySort: LiveData<List<MVoice>> = sortBy.map { mDBVoiceRepository.listVoiceBySort(it) }

Transformations.map renvoie un LiveData mappé à partir de la source d'entrée LiveData en appliquant la fonction transmise à chaque valeur définie sur la source. Cela signifie que listVoiceBySort mettra automatiquement à jour sa valeur après avoir modifié la valeur dans sortBy

1
IR42 7 sept. 2020 à 09:49