I am able to increase my quantity using the code below but I have a problem with it. It only increases once and decreases once, and when i click on add
it increases perfectly but when it comes to decreasing, it decreases 2 values at a time
example add-> 1+1=2 but sub -> 2-1=0
CartFragment
cartAdapter = new CartAdapter(getContext(), cartData.getProducts(), this);
LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
productCartRecyclerview.setLayoutManager(mLayoutManager1);
productCartRecyclerview.setAdapter(cartAdapter);
Listener
@Override
public void addQuantity(int position, TextView quantity) {
productQuantity= cartData.getProducts().get(position).getQuantity();
productQuantity++;
quantity.setText(""+productQuantity);
Toast.makeText(getContext(), ""+productQuantity, Toast.LENGTH_SHORT).show();
}
@Override
public void subQuantity(int position, TextView quantity) {
productQuantity= cartData.getProducts().get(position).getQuantity();
productQuantity--;
quantity.setText(""+productQuantity);
Toast.makeText(getContext(), ""+productQuantity, Toast.LENGTH_SHORT).show();
}
Cart Adapter
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.MyViewHolder> {
private Context context;
private ArrayList<Product> myArrayList;
private QuantityManipulation quantityManipulation;
public CartAdapter(Context context, ArrayList<Product> myArrayList,QuantityManipulation quantityManipulation ) {
this.context = context;
this.myArrayList = myArrayList;
this.quantityManipulation=quantityManipulation;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.item_cart,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Product product = myArrayList.get(position);
holder.cartTitle.setText(product.getProductName());
holder.primaryModifier.setText(""+product.getModifier1());
holder.secondaryModifier.setText(""+product.getModifier2());
// holder.cartSize.setText(product.get);
holder.cartPrice.setText(""+product.getProductBasePrice());
holder.cartQunatity.setText(""+product.getQuantity());
Picasso.get().load(product.getImageUrl()).into(holder.cartImage);
/* holder.add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int quantity;
quantity = product.getQuantity();
quantity++;
holder.cartQunatity.setText(""+quantity);
}
});
holder.sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int quantity;
quantity = product.getQuantity();
if (product.getQuantity() > 1){
quantity--;
holder.cartQunatity.setText(""+quantity);
}
Toast.makeText(context, ""+quantity, Toast.LENGTH_SHORT).show();
}
});*/
}
@Override
public int getItemCount() {
return myArrayList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView cartTitle;
TextView primaryModifier;
TextView cartPrice;
TextView cartQunatity;
TextView cartSize;
ImageView cartImage;
TextView secondaryModifier;
ImageView add;
ImageView sub;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
cartTitle =itemView.findViewById(R.id.txtcartTitle);
primaryModifier =itemView.findViewById(R.id.primarymodifier);
secondaryModifier = itemView.findViewById(R.id.secondaryModifier);
cartSize =itemView.findViewById(R.id.txtcartSize);
cartQunatity =itemView.findViewById(R.id.txtCartQuntity);
cartPrice =itemView.findViewById(R.id.txtCartPrice);
cartImage =itemView.findViewById(R.id.cartImageView);
add = itemView.findViewById(R.id.textQuntityAdd);
sub = itemView.findViewById(R.id.textQuntitySub);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
quantityManipulation.addQuantity(getAdapterPosition(),cartQunatity);
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
quantityManipulation.subQuantity(getAdapterPosition(),cartQunatity);
}
});
}
}
}
Interface Listener
public interface QuantityManipulation {
void addQuantity(int position, TextView quantity);
void subQuantity(int position, TextView quantity);
}
You're copying the productQuantity
and incrementing the copy:
productQuantity++;
So cartData.getProducts().get(position).getQuantity();
is always 1
, so adding always gets you 2
, and subtracting always gets you 0
.
You need to set the product's quantity to incremented quantity, probably via some sort of setQuantity
method (which you may have to write).
remove this line
@Override
public void subQuantity(int position, TextView quantity) {
productQuantity= cartData.getProducts().get(position).getQuantity(); //remove this
productQuantity--;
quantity.setText(""+productQuantity);
Toast.makeText(getContext(), ""+productQuantity, Toast.LENGTH_SHORT).show();
}
and productQuantity varialble to declare to global and when load this page assign productQuantity = cartData.getProducts().get(position).getQuantity()
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.