'item.view on clickListener does not work with my viewholder

I've created an adapter for my Category gridview to show in my Main activity. Categories are shown inside a CardView.

In order to click on each category, i can only access by the image or the text in the viewholder. that's not ideal, as you have to clicl exactly on the image to open new activity.

I would love to add the "itemview" to be able to click in any point of the cardview. I did it, but it does not work. I can only see the click but nothing happens. Something like this:

holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(context, categoryModel.getCatName(), Toast.LENGTH_SHORT).show();
        }
    });

My Adapter:

public class categoryCardViewAdpt extends RecyclerView.Adapter<categoryCardViewAdpt.ViewHolder> {

CategoryModel[] categoryModels;
Context context;

public categoryCardViewAdpt (CategoryModel[] categoryModels, MainActivity activity){
    this.categoryModels = categoryModels;
    this.context = activity;

}

public class ViewHolder extends RecyclerView.ViewHolder {
    public ImageView catImageView;
    public TextView catTv;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

        catImageView = (ImageView) itemView.findViewById(R.id.category_img2);
        catTv = (TextView) itemView.findViewById(R.id.category_name_2);
       

    }
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    View view = layoutInflater.inflate(R.layout.card_view_layout,parent,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {


    final CategoryModel categoryModel = categoryModels[position];

    holder.catTv.setText(categoryModel.getCatName());
    holder.catImageView.setImageResource(categoryModel.getCatImage());
    

    holder.catImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //Toast.makeText(context, categoryModel.getCatName(), Toast.LENGTH_SHORT).show();
            if (categoryModel.getCatName().equals(R.string.farina)){
                Intent intent  = new Intent(context, FarinaActivity.class);
                context.startActivity(intent);
            }
            else if (categoryModel.getCatName().equals(R.string.farina_inverso)){
                Intent intent  = new Intent(context, FarinaInversoActivity.class);
                context.startActivity(intent);
                //overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
            }

            else if (categoryModel.getCatName().equals(R.string.alcol)){
                Intent intent  = new Intent(context, AlcolActivity.class);
                context.startActivity(intent);
            }
            else if (categoryModel.getCatName().equals(R.string.panna)){
                Intent intent  = new Intent(context, PannaActivity.class);
                context.startActivity(intent);
            }
            else if (categoryModel.getCatName().equals(R.string.chocolate)){
                Intent intent  = new Intent(context, ChocoActivity.class);
                context.startActivity(intent);
            }

        }
    });

}

@Override
public int getItemCount() {
    return categoryModels.length;
}

}



Solution 1:[1]

your holder.catImageView is in your ItemView. so the click event may intercepted by ItemView.
Do not use holder.catImageView.setOnClickListener use : holder.itemView.setonClickListener.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 DavidChen