Reputation: 1205
I have a RecyclerView with 2 Buttons now i'm trying to set onClickListner for my Buttons inside RecyclerView. How can I set onClickListener for my Buttons inside recyclerView?
public class CartRecycleAdapter extends RecyclerView.Adapter<CartRecycleAdapter.RecycleViewHolder> {
private ArrayList<CartDataProvider> arraylist = new ArrayList<>();
public CartRecycleAdapter(ArrayList<CartDataProvider> arraylist){
this.arraylist = arraylist;
}
@Override
public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelcart, parent,false);
RecycleViewHolder recycleViewHolder = new RecycleViewHolder(view);
return recycleViewHolder;
}
@Override
public void onBindViewHolder(RecycleViewHolder holder, int position) {
CartDataProvider homeCycleDataProvider = arraylist.get(position);
holder.ItemImage.setImageResource(R.drawable.placeholder);
holder.TXV_ItemName.setText(homeCycleDataProvider.getItemName().toString());
holder.TXV_PastPrice.setText(String.valueOf(homeCycleDataProvider.getPastPrice()).toString());
holder.TXV_FixedPrice.setText(String.valueOf(homeCycleDataProvider.getFixedPrice()).toString());
holder.ratingBar.setRating(homeCycleDataProvider.getRating());
}
@Override
public int getItemCount() {
return arraylist.size();
}
public static class RecycleViewHolder extends RecyclerView.ViewHolder{
ImageView ItemImage;
TextView TXV_ItemName, TXV_PastPrice, TXV_FixedPrice, TXV_Percentage,TXV_Quantity;
ImageButton BTN_QuantityMinus, BTN_QuantityPlus;
RatingBar ratingBar;
public RecycleViewHolder(View view){
super(view);
ItemImage = (ImageView) view.findViewById(R.id.item_image);
TXV_ItemName = (TextView) view.findViewById(R.id.item_name);
TXV_PastPrice = (TextView) view.findViewById(R.id.past_price);
TXV_FixedPrice = (TextView) view.findViewById(R.id.fixed_price);
TXV_Percentage = (TextView) view.findViewById(R.id.percentiage);
ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
TXV_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
BTN_QuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);
}
}
}
here is my Fragment for RecyclerView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_cart, container, false);
TXT_TotalAmout = (TextView) view.findViewById(R.id.txt_total_amount);
TXT_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
BTNQuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);
CartItemRecyclerView = (RecyclerView) view.findViewById(R.id.item_recycler_id);
int i =0;
for (String name : itemname){
CartDataProvider cartDataProvider = new CartDataProvider(itemname[i], imageurl[i],
rating[i],pastprice[i],fixedprice[i]);
arrayList.add(cartDataProvider);
TotalPrice += fixedprice[i];
i++;
}
TXT_TotalAmout.setText(Double.valueOf(TotalPrice).toString());
adapter = new CartRecycleAdapter(arrayList);
CartItemRecyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
CartItemRecyclerView.setLayoutManager(layoutManager);
CartItemRecyclerView.setAdapter(adapter);
CartItemRecyclerView.setNestedScrollingEnabled(false);
return view;
}
Upvotes: 0
Views: 3358
Reputation: 1094
Since you have a reference to both of your buttons in your custom ViewHolder implementation, simply add an OnClickListener to each like so:
BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do your magic here
}
});
You can set the listener in the onBindViewHolder method.
Upvotes: 1
Reputation: 6839
In your onCreateViewHolder
recycleViewHolder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//if you need position, just use recycleViewHolder.getAdapterPosition();
}
});
OR
Do the same in your RecycleViewHolder
constructor.
BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// to get position use getAdapterPosition();
}
});
Upvotes: 1
Reputation: 1750
Do this:
public class CartRecycleAdapter extends RecyclerView.Adapter<CartRecycleAdapter.RecycleViewHolder> {
private ArrayList<CartDataProvider> arraylist = new ArrayList<>();
public CartRecycleAdapter(ArrayList<CartDataProvider> arraylist){
this.arraylist = arraylist;
}
@Override
public RecycleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.modelcart, parent,false);
RecycleViewHolder recycleViewHolder = new RecycleViewHolder(view);
return recycleViewHolder;
}
@Override
public void onBindViewHolder(RecycleViewHolder holder, int position) {
CartDataProvider homeCycleDataProvider = arraylist.get(position);
holder.ItemImage.setImageResource(R.drawable.placeholder);
holder.TXV_ItemName.setText(homeCycleDataProvider.getItemName().toString());
holder.TXV_PastPrice.setText(String.valueOf(homeCycleDataProvider.getPastPrice()).toString());
holder.TXV_FixedPrice.setText(String.valueOf(homeCycleDataProvider.getFixedPrice()).toString());
holder.ratingBar.setRating(homeCycleDataProvider.getRating());
/*handle the click in the bindViewHolder inside
the Recycler Adapter,not the fragment that calls this adapter.*/
holder.BTN_QuantityMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//handle the click here.
}
});
holder.BTN_QuantityPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// handle the click here.
}
});
}
@Override
public int getItemCount() {
return arraylist.size();
}
public static class RecycleViewHolder extends RecyclerView.ViewHolder{
ImageView ItemImage;
TextView TXV_ItemName, TXV_PastPrice, TXV_FixedPrice, TXV_Percentage,TXV_Quantity;
ImageButton BTN_QuantityMinus, BTN_QuantityPlus;
RatingBar ratingBar;
public RecycleViewHolder(View view){
super(view);
ItemImage = (ImageView) view.findViewById(R.id.item_image);
TXV_ItemName = (TextView) view.findViewById(R.id.item_name);
TXV_PastPrice = (TextView) view.findViewById(R.id.past_price);
TXV_FixedPrice = (TextView) view.findViewById(R.id.fixed_price);
TXV_Percentage = (TextView) view.findViewById(R.id.percentiage);
ratingBar = (RatingBar) view.findViewById(R.id.ratingBar);
TXV_Quantity = (TextView) view.findViewById(R.id.txv_quantity);
BTN_QuantityMinus = (ImageButton) view.findViewById(R.id.quantity_minus);
BTN_QuantityPlus = (ImageButton) view.findViewById(R.id.quantity_plus);
}
}
Note: You need to clas setOnClickListener method inside the onBindViewHolder method where the data is acually given the layout components not the Fragment that you are using to set the adapter by creating an instance of it.
Upvotes: 2