OnClickListener pour CardView?
comment fixer un OnClickListener
CardView
? Je veux que chaque carte ait une action différente lorsqu'elle est cliquée.
j'ai un RecyclerView
qui a un adaptateur personnalisé pour afficher les cartes. C'est comme cela mise en œuvre.
3 réponses
vous devriez implémenter le OnItemClickListener
dans votre ViewHolder
classe, et passer à l'élément actif à l' ViewHolder
cas sur tous les onBindViewHolder()
.
public static class ViewHolder extends RecyclerView.ViewHolder {
public View view;
public Item currentItem;
public ViewHolder(View v) {
super(v);
view = v;
view.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
// item clicked
}
});
}
}
@Override public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.currentItem = items.get(i);
}
vous avez juste à ajouter onClick Listener, quel article vous voulez dans onBindViewHolder. où d'accéder facilement à la valeur de cette position. veuillez vérifier le code ci-dessous.
@Override public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.title.setText(Html.fromHtml(html2text(results.get(position).getTitle().toString()))); holder.description.setText(Html.fromHtml(html2text(results.get(position).getSummary().toString()))); holder.url.setText(Html.fromHtml(html2text(results.get(position).getUrl().toString()))); holder.url.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(mContext, DetailsActivity.class); intent.putExtra("url",results.get(position).getUrl().toString()); mContext. startActivity(intent); } });
C'est ma solution pour ce problème:
tout d'abord ajouter une référence à L'objet View view dans la classe ViewHolder
public static class TouristViewHolder extends RecyclerView.ViewHolder{ public ImageView img; public TextView name; public TextView description; public RatingBar rating; public View view; // <----- here public TouristViewHolder(final View view) { super(view); this.view = view; // <----- here // ... rest of code } }
Ensuite, dans la méthode
onBindViewHolder(final MyViewHolder holder, final int position)
, j'ajoute un écouteur et je mets newIntent
.@Override public void onBindViewHolder(TouristViewHolder touristViewHolder, final int position) { touristViewHolder.view.setOnClickListener(new View.OnClickListener() { // <--- here @Override public void onClick(View v) { Log.i("W4K","Click-"+position); context.startActivity(new Intent(context,MainActivity.class)); // <--- here } });
Ça marche pour moi, fine, j'espère que ça aidera quelqu'un d'autre.