J'ai référencé Exemple de simple Android RECYCLERVIEW pour créer des événements sur des éléments de RECYCLERVIEW. Et puis j'applique de cette façon à Cardview à partir de RecyclerView, mais j'ai échoué.
OnChickick Event On Viewholder ne fonctionne pas. Il semble que les codes sont presque identiques. Je ne sais pas quel est le problème. P>
Je viens de copier des codes de la simple Exemple Android RecyclerView P>
puis modifié l'arraylist sur ArrayList De plus, je remplace XML qui contient textview code avec cardview. P>
J'ai réussi l'événement lorsque je mets OnClickListener sur Onbindviewholder. Mais j'ai entendu dire que cela rend l'application plus lourd. Donc, je veux éviter de cette façon. P>
MainActivity.java p> myadapter.java p>
4 Réponses :
Il existe également un moyen de faire ce
Je prends cela comme une solution. Mais je veux toujours savoir pourquoi mon code ne fonctionne pas. thx pour la réponse.
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
// each data item is just a string in this case
public ImageView mImageView;
public TextView mTextView;
public CardView cv;
public ViewHolder(View view) {
super(view);
mImageView = (ImageView)view.findViewById(R.id.image);
mTextView = (TextView)view.findViewById(R.id.textview);
cv = (CardView)view.findViewById(R.id.cardview);
//for whole cardview (If you want to click only card)
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do the action.
}
});
//if you want to click the only particular item in the CardView
mImageView .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do the action.
}
});
}
}
Try this snippet and let me know. I can solve it for you if it doesn't work.
Le problème est votre interface code> correspond à la partie de la classe Adapter code> pendant que votre onclicklistener code> fait partie de la classe titulaire code>. Vous devez appeler le clicklistener code> à partir de l'adaptateur Onbindviewholder code> .Pour à cette fin, vous devez donner le ID code> à la disposition racine du Fichier de layout d'article CODE> et trouvez la vue par ID dans Constructeur d'éléments code> .after que vous pouvez appeler ClickListener comme ci-dessous. @Override
public void onBindViewHolder(ViewHolder holder, final int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
Log.d("position", position+"");
holder.mTextView.setText(mDataset.get(position).text);
holder.mImageView.setImageResource(mDataset.get(position).img);
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickListener.onItemClick(v, position)
}
});
}
OnClickListener à Onbindviewholder est une mauvaise pratique @RAZA.
Ajoutez simplement ces lignes Donnez ci-dessous dans Onbindviewholder strong>
Vous avez déjà ajouté ce cv = (cardview) vue.findviewyID (r.id.cardview); em> p>
blockQuote> ligne de sorte qu'il fonctionne ou assurez-vous de donner carte View en XML ID Nom est CardView P>
cv = (CardView)view.findViewById(R.id.cardview);
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickListener.onItemClick(v, position)
}
});
Vous souhaitez activer une action en cliquant sur l'ensemble de la vision de CardView ou de toute vue particulière de la View? @escargot
@ g.brahma datta um .. Si ça ne vous dérange pas, je veux savoir de toute façon. mais l'original est Th de gameview
Sûr. Vérifiez ma réponse ci-dessous @snail.