web-dev-qa-db-fra.com

Actualisation de MutableLiveData de la liste d'éléments

J'utilise LiveData et ViewModel à partir des composants d'architecture de mon application.

J'ai une liste d'éléments qui est paginée, je charge plus que l'utilisateur fait défiler. Le résultat de la requête est stocké dans un 

MutableLiveData<List<SearchResult>>

Lorsque je fais le chargement initial et que je définis la variable sur une nouvelle liste, un rappel est déclenché sur l'adaptateur de liaison qui charge les données dans la vue recyclée.

Toutefois, lorsque je charge la 2ème page et que j'ajoute les éléments supplémentaires à la liste, le rappel n'est pas déclenché. Toutefois, si je remplace la liste par une nouvelle liste contenant à la fois l'ancien et le nouvel élément, le rappel est déclenché.

Est-il possible que LiveData notifie ses observateurs lorsque la liste de sauvegarde est mise à jour, et pas seulement lorsque l'objet LiveData est mis à jour?

Cela ne fonctionne pas (en ignorant les contrôles nuls):

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

results.value.addAll(newResults)

Cela marche:

val results = MutableLiveData<MutableList<SearchResult>>()

/* later */

val list = mutableListOf<SearchResult>()
list.addAll(results.value)
list.addAll(newResults)
results.value = list
6
Francesc

Selon MutableLiveData , vous devez utiliser postValue ou setValue afin de déclencher les observateurs.

2
Unline

Je pense que l'extension est un peu plus agréable.

operator fun <T> MutableLiveData<ArrayList<T>>.plusAssign(values: List<T>) {
    val value = this.value ?: arrayListOf()
    value.addAll(values)
    this.value = value
}

Usage:

list += anotherList;
2
Samnang CHEA