如何在RecyclerView内的购物车功能中增加/减少特定物品的数量?

时间:2018-10-12 07:31:32

标签: java android android-recyclerview

我正在从事基于购物车项目的项目。我必须在其中增加/减少订单项目数量两个按钮。每件事都很好,但是在特定项目的增加/减少值上,它不能从1开始计数。它可以得到以前的计数值。

屏幕截图

这是我的RecyclerAdapter代码。

public class CheckOutAdapter extends RecyclerView.Adapter<CheckOutAdapter.MyVHolder> {

    ArrayList<CartModel> itemsList;
    Context context;
    OnItemClickListner mListner;
    int quantity;


    public CheckOutAdapter(ArrayList<CartModel> itemsList, Context context) {
        this.context = context;
        this.itemsList = itemsList;
    }

    @NonNull
    @Override
    public MyVHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.inflator_for_checkoutfrag, parent, false);
        return new MyVHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyVHolder holder, int position) {
        /*holder.catgry_txt_title.setText(itemsList.get(position).title);
        holder.catgry_img.setImageResource(itemsList.get(position).img);*/
        holder.itemName.setText(itemsList.get(position).CartIteMname);
        holder.itemPartNo.setText(itemsList.get(position).cartItemno);
        holder.finalprice.setText(String.format("%s $", itemsList.get(position).totalprice));

        Picasso.with(context).load(itemsList.get(position).carPart_imgURL).into(holder.itemIMG);

        quantity = Integer.parseInt(itemsList.get(position).cartQuantity);

        if (quantity == 1) {
            holder.txtQuantity.setText(String.valueOf(quantity));
        }
        holder.btnIncrease.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //int count= Integer.parseInt(String.valueOf(holder.txtQuantity.getText()));
                quantity++;
                holder.txtQuantity.setText(String.valueOf(quantity));

            }
        });

        holder.btnDecrease.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int count= Integer.parseInt(String.valueOf(holder.txtQuantity.getText()));

                if (quantity>1)

                quantity--;
                holder.txtQuantity.setText(String.valueOf(quantity));

            }
        });

    }

    @Override
    public int getItemCount() {
        Log.e("adapterLSize",String.valueOf(itemsList.size()));
        return itemsList.size();
    }

    class MyVHolder extends RecyclerView.ViewHolder {
        ImageView itemIMG, removeCart, btnIncrease, btnDecrease;
        TextView cartItemTitle, itemName, itemPartNo, finalprice, txtQuantity;
        LinearLayout addtoCart;
        MyVHolder(View itemView) {
            super(itemView);
            cartItemTitle = itemView.findViewById(R.id.cartItemTitle);
            itemName = itemView.findViewById(R.id.itemName);
            itemPartNo = itemView.findViewById(R.id.itemPartNo);
            finalprice = itemView.findViewById(R.id.finalprice);
            itemIMG = itemView.findViewById(R.id.itemIMG);
            txtQuantity = itemView.findViewById(R.id.txtQuantity);
            btnIncrease = itemView.findViewById(R.id.btnIncrease);
            btnDecrease = itemView.findViewById(R.id.btnDecrease);
            removeCart = itemView.findViewById(R.id.removeCart);
        }

    }

}

我的问题:

  • 如何在Android的RecyclerView中增加/减少购物车功能中的特定物品数量?

4 个答案:

答案 0 :(得分:0)

在增加的onClick中,您直接使用所有项目共有的quantity变量。这意味着它可以压下的物品的数量可以是另一物品的数量。

要减小,您要在减小之前将其正确设置为该特定项目的当前值。增加同样的操作即可解决。尽管您似乎出于某种原因对此行发表了评论?

一种更好的方法是从itemsList中获取相应的项目,并递增或递减cartQuantity变量,然后使用它。当前解析显示的文本的方法是一种非常round回的跟踪方式。

答案 1 :(得分:0)

这是您在寻找/ *数量* /

方法的代码

public void Positive(视图){/ *致电+ * / 字符串a = display Integer.get Text()。to String()。trim(); int ab = Integer.parseInt(a); abfg = abfg + 1; display(abfg);

}

public void reductionNegative(View view){/ call-- /  字符串bcd = displayInteger.getText()。toString()。trim(); int vc = Integer.parseInt(bcd); Toast.makeText(getApplicationContext(),String.valueOf(vc),Toast.LENGTH_LONG).show(); if(vc> 1){

vc = vc-1; }

/ * if(vc <0){vc = 1; } * / display(vc); }

private void display(int number){//显示displayInteger.setText(“” + number); text = displayInteger.getText()。toString();量化= Integer.parseInt(文本); }

答案 2 :(得分:0)

您也可以使用com.cepheuen.elegantnumberbutton.view.ElegantNumberButton 来自GitHub。

然后将其添加到您的Gradle实现中: com.cepheuen.elegant-number-button:lib:1.0.2

答案 3 :(得分:0)

您只需要这样做:

myViewHolder.btnIncrease.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onClick(View v) {
            int count= Integer.parseInt(String.valueOf(myViewHolder.tvQuantity.getText()));
            count++;
            myViewHolder.tvQuantity.setText("" + count);
        }
    });

    myViewHolder.btnDecrease.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onClick(View v) {
            int count= Integer.parseInt(String.valueOf(myViewHolder.tvQuantity.getText()));
            if (count == 1) {
                myViewHolder.tvQuantity.setText("1");
            } else {
                count -= 1;
                myViewHolder.tvQuantity.setText("" + count);
            }
        }
    });