Pour ceux qui veulent plus d'explications sur la fonction @DamiaFuentes switchmap(), voici un exemple :
MutableLiveData userIdLiveData = ...;
LiveData userLiveData = Transformations.switchMap(userIdLiveData, id ->
repository.getUserById(id));
void setUserId(String userId) {
this.userIdLiveData.setValue(userId);
}
Dans un scénario où le référentiel contient User(1, "Jane") et User(2, "John"), lorsque la valeur userIdLiveData est définie sur "1", le switchMap appelle getUser(1), qui renvoie une LiveData contenant la valeur User(1, "Jane"). Donc maintenant, le userLiveData émettra User(1, "Jane"). Lorsque l'utilisateur du référentiel sera mis à jour en User(1, "Sarah"), le userLiveData sera automatiquement notifié et émettra User(1, "Sarah").
Lorsque la méthode setUserId est appelée avec userId = "2", la valeur de la userIdLiveData change et déclenche automatiquement une requête pour obtenir l'utilisateur avec l'id "2" du référentiel. Ainsi, le userLiveData émet User(2, "John"). La LiveData renvoyée par repository.getUserById(1) est supprimée comme source.
À partir de cet exemple, nous pouvons comprendre que le userIdLiveData est le déclencheur et que le LiveData renvoyé par le repository.getUserById est le LiveData "backing".
Pour plus de références, consultez le site : https://developer.Android.com/reference/Android/arch/lifecycle/Transformations
2 votes
Voir aussi Quelle est la différence entre les méthodes map() et switchMap() ? . Il ne s'agit peut-être pas d'un duplicata à 100%, mais il contient des explications très utiles.