Pourquoi OnClickListener sur un ViewHolder ne fonctionne pas?
Je suis en train de mettre en œuvre un moyen de gérer la sélection de l'élément sur un RecyclerView
. Personnellement, je n'aime pas la façon suggérée dans certaines réponses sur AFIN de passer au travers de gestes, et j'ai pensé que la mise en œuvre d'un OnClickListener
comme l'a suggéré ici et icia été waaay plus propre.
Le fait est que... ce modèle ne fait pas travailler! Je ne suis vraiment pas en mesure de comprendre pourquoi mon OnClickListener.onClick
est jamais appelé. C'est un peu comme une autre méthode intercepte le clic avant de onClick
peut prendre soin d'elle.
C'est mon code:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView tvName;
ImageView star;
public ViewHolder(View itemView) {
super(itemView);
tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name);
star = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_star);
Fonts.setTypeface(tvName, regular);
}
@Override
public void onClick(View view) {
int position = getLayoutPosition();
select(position);
}
}
Malheureusement, il est très important pour moi de pouvoir accéder à la position de l'élément cliqué dans l'ensemble du jeu de données, afin de le supprimer, afin de faire quelque chose comme indexOfChild
n'est pas acceptable: j'ai essayé, mais cette méthode vous donne la position de l'élément dans le visible partie de la liste, et donc de faire de list.remove(position)
impossible.
source d'informationauteur Gianluca
Vous devez vous connecter pour publier un commentaire.
En regardant le code mis à jour: vous n'êtes pas le réglage de la onClickListener à l'un des points de vue dans le ViewHolder. Il est compréhensible erreur d'oublier l'écouteur de clics.
Suffit d'utiliser:
Vous pouvez définir à la fois ou seulement l'un d'eux. Vous pouvez aussi tout simplement obtenir le parent de mise en page de ces deux points de vue, de sorte que l'ensemble de l'élément lui-même dans l'adaptateur peut être cliquable.
Vous pouvez le faire dans votre onBindViewHolder