mise à jour RecyclerView avec Android LiveData
Il y a de nombreux exemples sur la façon de pousser la nouvelle liste de l'adaptateur sur LiveData changement.
Je suis en train de mettre à jour une ligne e.g nombre de commentaires par post) dans la liste énorme. Il serait stupide de le réinitialiser toute la liste pour modifier un seul champ.
Je suis en mesure d'ajouter observateur onBindViewHolder, mais je ne peux pas comprendre quand dois-je retirer de l'observateur
@Override
public void onBindViewHolder(ViewHolder vh, int position) {
Post post = getPost(position);
vh.itemView.setTag(post);
post.getLiveName().observeForever(vh.nameObserver);
...
}
OriginalL'auteur Andrew Matuk | 2017-06-11
Vous devez vous connecter pour publier un commentaire.
Comme @Lyla dit, vous devriez observer l'ensemble de la liste LiveData du Fragment ou de l'Activité, lors de recevoir des modifications, vous devez définir l'ensemble de la liste à la carte par DiffUtil.
Faux code:
OriginalL'auteur Spark.Bao
À l'aide de DiffUtil pourrait aider à mettre à jour une ligne dans une liste énorme. Vous pouvez alors LiveData envelopper la liste des commentaires au lieu d'un seul commentaire ou un attribut d'un commentaire.
Voici un exemple d'utilisation de DiffUtil dans un RecyclerView adaptateur et la liste LiveData observation dans le fragment de code.
Correction du lien! Merci!
OriginalL'auteur Lyla
Utilisation
Transformations.switchMap()
de swap sous-jacentPost
objet. Il n'est pas nécessaire de supprimer et de rajouter des observateurs lorsque la cellule est recyclé.Puis dans votre ViewHolder classe
input.getLiveName()
chercher du travail? N'est-ce pas Poster de l'entité de la classe? Ou il peut retourner LiveDatas trop?OriginalL'auteur tom-pratt