item.view on clickListener does not work with my viewholder

66 views Asked by At

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;
}

}

1

There are 1 answers

1
DavidChen On

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.