android – OnClickListener for CardView?-ThrowExceptions

Exception or error:

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 to solve:

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) {
        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);


  1. you just add onClick Listener, which Item you want in onBindViewHolder. where easily accessing the value of that position. please check the below code.

    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.url.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent=new Intent(mContext, DetailsActivity.class);
               mContext. startActivity(intent);


This is my solution for this problem:

  1. 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) {
            this.view = view;            // <----- here
            // ... rest of code
  2. Next, in method onBindViewHolder(final MyViewHolder holder, final int position), I add a listener and set new Intent.

    public void onBindViewHolder(TouristViewHolder touristViewHolder, final int position) {
    touristViewHolder.view.setOnClickListener(new View.OnClickListener() {  // <--- here
        public void onClick(View v) {
            context.startActivity(new Intent(context,MainActivity.class));  // <--- here

It works for me fine, hope it will help someone else.

Leave a Reply

Your email address will not be published. Required fields are marked *