如何管理回收器查看项目的按钮单击



我有回收器视图,它正在显示产品购物车列表,现在我添加了功能,用户可以更改产品数量,但问题是,如果我更改第一项的数量,它也会影响下一个或其他项目。 任何人都可以检查一下,我也发布了代码......

 private List<CartList> stList;
        String prodName = "", imgURL = "", prodSize = "", prodColor = "", prdAvail = "";
        double prodPrice = 0.0, totValue = 0.0;
        int prodQty = 1, prdAvl = 0;
        @NonNull
        @Override
        public CardViewDataAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                                 int viewType) {
            @SuppressLint("InflateParams")
            View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.layout_cartlist_item, null);
            return new CardViewDataAdapter.ViewHolder(itemLayoutView);
        }
        CardViewDataAdapter(List<CartList> students) {
            this.stList = students;
        }
        @Override
        public void onBindViewHolder(@NonNull final CardViewDataAdapter.ViewHolder viewHolder, final int position) {
            try {
                prodName = stList.get(position).getCartList1().getProdName();
                imgURL = stList.get(position).getCartList1().getProdImage();
                prodSize = stList.get(position).getCartList1().getProdSize();
                prodColor = stList.get(position).getCartList1().getProdColor();
                prodQty = stList.get(position).getCartList1().getProdQty();
                prodPrice = stList.get(position).getCartList1().getProdQty();
                String productAvails = stList.get(position).getCartList1().getWarehouseDetail();
                totValue = stList.get(position).getCartList1().getGrandTotal() -
                        stList.get(position).getCartList1().getShippingCost();
                String avails[] = productAvails.split(":");
                prdAvail = avails[2];
                prdAvl = Integer.parseInt(prdAvail);
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (stList.get(position).getCartList1().getSeller_id() == 0
                        || stList.get(position).getCartList1().getSeller_id() != 1) {
                    viewHolder.tvSellerName.setText("seller: Milmila");
                } else {
                    viewHolder.tvSellerName.setText("seller: Seajol Solutions");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            viewHolder.tvName.setText(prodName);
            viewHolder.tvProdPrice.setText("Rs. " + String.valueOf(totValue));
            viewHolder.tvProdQty.setText("Qty: " + String.valueOf(prodQty));
            viewHolder.tvProdSize.setText("Size: " + String.valueOf(prodSize));
            viewHolder.tvProdColor.setText("Color: " + String.valueOf(prodColor));
            if (prdAvail.isEmpty() || prdAvail.equalsIgnoreCase("0.0")) {
                viewHolder.prdAvail.setText("Out Of Stock");
            } else {
                viewHolder.prdAvail.setText("Available in stock: " + prdAvail);
            }
            Glide.with(mContext)
                    .load(imgURL)
                    .apply(new RequestOptions()
                            .placeholder(R.drawable.no_image))
                    .into(viewHolder.prodImage);
            viewHolder.chkSelected.setChecked(stList.get(position).getSelected());
            viewHolder.chkSelected.setTag(stList.get(position));
           // int quantity_count=prodQty = stList.get(position).getCartList1().getProdQty();
           viewHolder.edt_product_qty.setText(String.valueOf(prodQty));
            viewHolder.increase_product_qty.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    prodQty++;
                    viewHolder.edt_product_qty.setText(String.valueOf(prodQty));
                }
            });
            viewHolder.decrease_product_qty.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (prodQty>1)
                    {
                        prodQty--;
                        viewHolder.edt_product_qty.setText(String.valueOf(prodQty));
                    }
                }
            });

是的,这可能会发生,因为在滚动回收器视图时可能会更改滚动状态和位置。

您使用相同的prodQty变量,并且直接使用viewHolder.edt_product_qty.setText("")内部按钮单击,因此在这种情况下,您的edt_product_qty会根据您的滚动位置而有所不同。

您可以在列表项的数量编辑文本中使用android:freezesText="true"

您可以管理它,我将位置添加为按钮上的标签。

对于增加数量:

viewHolder.increase_product_qty.setTag(viewHolder.edt_product_qty);
viewHolder.increase_product_qty.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        EditText selEditText = (EditText) v.getTag();
        final int qty = Integer.parseInt(selEditText.getText().toString()) + 1;
        selEditText.setText(String.valueOf(qty));
    }
});

对于减少数量:

viewHolder.decrease_product_qty.setTag(viewHolder.edt_product_qty);
viewHolder.decrease_product_qty.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        EditText selEditText = (EditText) v.getTag();
        final int qty = Integer.parseInt(selEditText.getText().toString()) - 1;
         if (qty>1){
            selEditText.setText(String.valueOf(qty));
        }
    }
});

最新更新