Comment mettre à jour/actualiser élément spécifique dans RecyclerView
Je suis en train d'actualiser élément spécifique dans RecyclerView
.
Histoire: Chaque fois que l'utilisateur clique sur l'élément, il montre AlertDialog
. L'utilisateur peut taper un peu de texte en cliquant sur le bouton ok. J'en veux pour preuve ce texte en ce point et de montrer l'invisible ImageView
- a déclaré dans XML et l'adaptateur ViewHolder
-
J'ai utilisé cette fonction dans AlertDialog
Positif Bouton de mise à jour de l'article:
private void updateListItem(int position) {
View view = layoutManager.findViewByPosition(position);
ImageView medicineSelected = (ImageView) view.findViewById(R.id.medicine_selected);
medicineSelected.setVisibility(View.VISIBLE);
TextView orderQuantity = (TextView) view.findViewById(R.id.order_quantity);
orderQuantity.setVisibility(View.VISIBLE);
orderQuantity.setText(quantity + " packet added!");
medicinesArrayAdapter.notifyItemChanged(position);
}
Mais ce code ne modifie uniquement la itemView au passé de la position, mais aussi des modifications de certains des autres itemView(s) ainsi!
Comment dois-je changer itemView correctement en cliquant sur elle?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
notifyItemChanged(int position)
méthode de la RecyclerView.Adaptateur de classe. À partir de la documentation:Comme vous avez déjà de la position, il doit travailler pour vous.
onBindViewHolder()
onBindViewHolder()
ressembler?Mise à jour seul élément
notifyItemChanged(updateIndex)
Exemple
Changer le "Mouton" objet de manière à ce qu'il dit: "j'aime les moutons."
Ma réponse complète avec plus d'exemples est ici.
Je pense que j'ai une Idée sur la façon d'aborder cette. La mise à jour est la même que la suppression et le remplacement à la position exacte. J'ai donc d'abord supprimer l'élément à partir de cette position à l'aide du code ci-dessous:
et puis je voudrais ajouter l'élément à la position indiquée ci-dessous:
Je suis en train de mettre en œuvre maintenant. Je voudrais vous donner un feedback quand je suis à travers!
Je suis arrivé à résoudre ce problème par la capture de la position de l'élément qui doit être modifié
et puis dans l'adaptateur appel
ce qui appelle onBindViewHolder(ViewHolder titulaire, int position) pour cet élément spécifique à ce poste en particulier.
Ajouter le texte modifié à votre modèle de données de la liste
Une manière qui a travaillé pour moi personnellement, est à l'aide de la recyclerview de l'adaptateur de méthodes pour faire face à des changements dans les éléments.
Il serait d'aller dans une voie semblable à cela, créer une méthode dans votre personnalisé recycler vue un peu comme ceci:
Ci-dessous la solution a fonctionné pour moi:
Sur un RecyclerView élément, l'utilisateur doit cliquer sur un bouton mais un autre point de vue comme TextView mettra à jour directement sans notification adaptateur:
J'ai trouvé une bonne solution pour ce sans l'aide de notifyDataSetChanged() la méthode, cette méthode de recharge de toutes les données de recyclerView donc si vous avez de l'image ou de la vidéo à l'intérieur de l'élément puis ils se recharger et de l'expérience utilisateur n'est pas bon:
Voici un exemple de cliquer sur une ImageView comme icône et ne mettre à jour un seul TextView (Possible de mettre à jour plus de voir dans la même façon d'un même article) pour montrer comme le comte de mise à jour après l'ajout +1:
De votre carte en classe, dans onBindViewHolder méthode, la valeur ViewHolder à setIsRecyclable(faux) comme dans le code ci-dessous.
vous avez juste à ajouter le code suivant dans la boîte de dialogue alerte sur enregistrer cliquez sur
si vous créez un objet et en l'ajoutant à la liste que vous utilisez dans votre carte ,
lorsque vous modifiez un élément de votre liste dans la carte de tous vos autres variation des éléments trop
en d'autres mots, tous ses propos de références et de votre liste ne tient pas des copies distinctes de l'objet unique.
C'est aussi mon dernier problème. Voici ma solution
J'utilise le Modèle de données et adaptateur pour mon RecyclerView
Dans votre RecyclerView adaptateur, vous devriez avoir une liste de tableaux et également une méthode
addItemsToList(items)
pour ajouter des éléments à la liste de tableaux. Ensuite, vous pouvez ajouter des éléments de liste par appeladapter.addItemsToList(items)
de façon dynamique. Après tout, la liste de vos éléments ajoutés à la liste de tableaux vous pouvez appeleradapter.notifyDataSetChanged()
pour afficher votre liste.Vous pouvez utiliser le
notifyDataSetChanged
dans l'adaptateur pour le RecyclerView