J'ai un RecyclerView qui affiche une série de vues dérivées d'une base de données. Je souhaite confirmer que l'utilisateur a sélectionné l'une des vues en mettant en évidence ses bords, et j'ai réussi à le faire. Si l'utilisateur continue à sélectionner une option différente, je souhaite supprimer la surbrillance sur la sélection originale. C'est là que j'ai rencontré quelques problèmes.Accéder à un ViewHolder, directement depuis RecyclerView, par position
Le point culminant initial était sans problème, comme je le faisais, en interne. Cependant, je ne sais pas comment accéder à la vue précédente avec seulement sa position d'adaptateur. J'ai cherché StackOverflow pendant environ une heure maintenant, car je ne peux pas trouver beaucoup de choses à faire dans l'API Android, ou à partir de google. Beaucoup d'utilisateurs semblent poser des questions similaires, mais finalement, des différences subtiles annulent toutes les réponses utiles.
intérieur de mon ViewHolder
, qui est un public class
interne de mon RecyclerView
, j'ai un OnClickListener
comme suit:
@Override
public void onClick(View view) {
if(!selected) {
selected = true;
view.setBackgroundResource(R.drawable.default_selection_background);
} else {
selected = false;
view.setBackgroundResource(0);
}
UpdateSelected(getAdapterPosition());
}
Ceci nous ramène à mon RecyclerView
, et franchement, je suis encore d'ajouter un code de travail à ma méthode UpdateSelected(int position)
.
Si elle aide, je l'intention de le faire fonctionner comme ceci:
void UpdateSelected(int position) {
if(position != currentlySelected) {
ViewHolder[currentlySelected].Deselect();
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
...
public void Deselect() {
// and from here, I can go on as normal.
}
}
je les utilisateurs remarqués conseiller les autres à utiliser getLayoutPosition()
pour obtenir la position à des fins de l'interface utilisateur, à moins qu'ils ne souhaitent plus particulièrement de continuer à travailler avec le données internes, ce que j'ai l'intention de faire.
Comment accéder à un ViewHolder particulier à partir de mon RecyclerView, en utilisant sa position?
Brillant! fonctionne comme un charme. Il n'y avait que le changement que j'ai dû faire dans 'onBindViewHolder', qui a immédiatement accès à' view'. J'ai simplement utilisé 'viewHolder.itemView.setBackgroundResource (backgroundRes)'. Pour le point de vue de l'efficacité, j'ai aussi 'notifyItemChanged' sur' previousSelection' et 'currentSelection', mais merci beaucoup. – Gnemlock
Je suis également confronté au même problème. donc j'essaie cette solution mais ne fonctionnait pas dans mon cas. @Gnemlock –
J'ai juste trébuché sur cette réponse, et bien que ce soit bon, je suggère de changer 'notifyDataSetChanged()' 'notifyItemChanged (selectedPosition)'. Il est conseillé d'éviter d'appeler 'notifyDataSetChanged()' lorsque vous pouvez indiquer précisément à l'adaptateur quelles vues doivent être mises à jour. –