How do I attach an OnClickListener
to a CardView
? I want every single card to have a different action when clicked.
I have a RecyclerView
that has a custom adapter for displaying the cards. This is how it's implemented.
How do I attach an OnClickListener
to a CardView
? I want every single card to have a different action when clicked.
I have a RecyclerView
that has a custom adapter for displaying the cards. This is how it's implemented.
You should implement the OnItemClickListener
in your ViewHolder
class, and pass the current item to the ViewHolder
instances on every onBindViewHolder()
.
From this post:
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);
}
This is my solution for this problem:
First add reference to View view object in ViewHolder class
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
}
}
Next, in method onBindViewHolder(final MyViewHolder holder, final int position)
, I add a listener and set new Intent
.
@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
}
});
It works for me fine, hope it will help someone else.
you just add onClick Listener, which Item you want in onBindViewHolder. where easily accessing the value of that position. please check the below code.
@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);
}
});
Hello everybody this worked :
cardView=findViewById(R.id.cardView);
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(),"clicked",Toast.LENGTH_SHORT).show();
}
});