Dewi Ayu
Dewi Ayu

Reputation: 21

How to set OnClick android cardview example with gridlayout

I have an Android project to create grid layout items that can be clicked on. I'm confused about where to set the On Click Listener and what the code looks like. here is my Adapter code program :

public class MyAdapter extends RecyclerView.Adapter <FruitViewHolder> {

    private Context mContext;
    private List< FruitsData > mFruitList;

    MyAdapter(Context mContext, List< FruitsData > mFruitList) {
        this.mContext = mContext;
        this.mFruitList = mFruitList;
    }

    @Override
    public FruitViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View mView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item_row, parent, false);
        return new FruitViewHolder(mView);

    }

    @Override
    public void onBindViewHolder(final FruitViewHolder holder, int position) {
        holder.mImage.setImageResource(mFruitList.get(position).getFruitImage());
        holder.mTitle.setText(mFruitList.get(position).getFruitName());


    }

    @Override
    public int getItemCount() {
        return mFruitList.size();
    }
}

class FruitViewHolder extends RecyclerView.ViewHolder {

    ImageView mImage;
    TextView mTitle;

    FruitViewHolder(View itemView) {
        super(itemView);

        mImage = itemView.findViewById(R.id.ivImage);
        mTitle = itemView.findViewById(R.id.tvTitle);


    }
}

Thanks for your attention..

Upvotes: 2

Views: 540

Answers (1)

kAliert
kAliert

Reputation: 768

Basically you have to do the following steps:

  1. Define a ClickListener interface

    public interface OnItemClickListener {
      void onItemClick(FruitsData item);
    }
    
  2. Pass your ClickListener to the constructor of your adapter

    MyAdapter(Context mContext, List<FruitsData > mFruitList, OnItemClickListener listener) {
        this.mContext = mContext;
        this.mFruitList = mFruitList;
        this.listener = listener;
     }
    
  3. Then create a setter for the listener

    public void setListener(OnItemClickListener listener) {
      this.listener=listener;
    }
    
    //and ease your constructor
    
  4. Set an onClickListener to your viewHolder and call your listener

    @Override
    public void onBindViewHolder(final FruitViewHolder holder, int position) {
        final FruitsData item = mFruitList.get(position);
        holder.mImage.setImageResource(item .getFruitImage());
        holder.mTitle.setText(item getFruitName());
        holder.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                listener.onItemClick(item);
            }
        });
    }
    

Upvotes: 2

Related Questions