Увеличивает количество предметов для указанного c предмета в представлении переработчика - PullRequest
0 голосов
/ 12 марта 2020

Я могу увеличить количество, используя приведенный ниже код, но у меня проблема с ним. Он увеличивается только один раз и уменьшается один раз, а когда я нажимаю add, он отлично увеличивается, но когда дело доходит до уменьшения, он уменьшает 2 значения за раз

пример add-> 1 + 1 = 2, но суб -> 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);

Слушатель

  @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();
    }

Адаптер корзины

    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);
                }
            });

        }
    }
}

Интерфейсный прослушиватель

public interface QuantityManipulation {

    void addQuantity(int position, TextView quantity);
    void subQuantity(int position, TextView quantity);
}

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

удалить эту строку

@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();
    }

и переменную productQuantity для объявления в глобальном масштабе, а при загрузке этой страницы назначить productQuantity = cartData.getProducts().get(position).getQuantity().

0 голосов
/ 12 марта 2020

Вы копируете productQuantity и увеличиваете копию:

productQuantity++;

Таким образом, cartData.getProducts().get(position).getQuantity(); всегда 1, поэтому сложение всегда дает вам 2, а вычитание всегда вас 0.

Вам нужно установить количество товара в увеличенное количество, возможно, с помощью какого-то метода setQuantity (который вам, возможно, придется написать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...