Reputation: 21
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
Reputation: 768
Basically you have to do the following steps:
Define a ClickListener interface
public interface OnItemClickListener {
void onItemClick(FruitsData item);
}
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;
}
Then create a setter for the listener
public void setListener(OnItemClickListener listener) {
this.listener=listener;
}
//and ease your constructor
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