简体   繁体   中英

Increment item count of specific item in recyclerview

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM