简体   繁体   English

android recyclerview 在 object 中恢复 state

[英]android recyclerview restoring state in object

The app functionality is similar to shopping cart.该应用程序功能类似于购物车。 User can add products and increase/decrease quantity by clicking on respective buttons.用户可以通过单击相应的按钮来添加产品和增加/减少数量。 By default the quantity value is set to 1. I am facing a problem whenever the user adds new product to recyclerview the previous products quantity is also changing to 1. How to avoid this?默认情况下,数量值设置为 1。每当用户将新产品添加到 recyclerview 时,我都会遇到问题,之前的产品数量也更改为 1。如何避免这种情况? How can I restore the state(incremented/decremented value) in object?如何恢复 object 中的状态(递增/递减值)?

 @Override
public void onBindViewHolder(@NonNull RVOrderBrdAdapter.RVViewHolder holder, int position) {
    //getting the product of the specified position
    OrderBrdDataModel product = filteredList.get(position);

    //binding the data with the viewholder views
    double org_p = product.getBrdprice();
    holder.brd_value.setText(String.valueOf(product.getBrdprice()));
    holder.brd_product.setText(product.getBrdname());
    holder.brd_quantity.setText("1");

    holder.brd_increment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            number = Integer.parseInt(""+holder.brd_quantity.getText().toString());
            if(holder.brd_quantity.getText().toString().equals("")){
                Toast.makeText(v.getContext(), "Quantity cannot be empty", Toast.LENGTH_SHORT).show();
            }else if(number >=9999){
                Toast.makeText(v.getContext(), "Quantity cannot be greater than 9999", Toast.LENGTH_SHORT).show();

            }else{
                number++;
            }

            holder.brd_quantity.setText(""+number);
            double iw = Double.parseDouble(String.format("%.2f",(org_p*number)));
            holder.brd_value.setText(String.valueOf (iw));
        }
    });

    holder.brd_decrement.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            number = Integer.parseInt(""+holder.brd_quantity.getText().toString());
            if(holder.brd_quantity.getText().toString().equals("")){
                Toast.makeText(v.getContext(), "Quantity cannot be empty", Toast.LENGTH_SHORT).show();
            }else if(number<=0){
                Toast.makeText(v.getContext(), "Quantity cannot be less than 0", Toast.LENGTH_SHORT).show();
                number = 0;
            }else {
                number--;

            }
            holder.brd_quantity.setText(""+number);
            double dw = Double.parseDouble(String.format("%.2f",(org_p*number)));
            holder.brd_value.setText(String.valueOf(dw));
        }
    });

You could add the quantity to the OrderBrdDataModel or wrap OrderBrdDataModel in something like OrderBrdDataModelWithQuantity.您可以将数量添加到 OrderBrdDataModel 或将 OrderBrdDataModel 包装在 OrderBrdDataModelWithQuantity 之类的东西中。 In OnBindViewHolder use the quantity from this variable and make sure to update the quantity value in brd_increment/decrement.在 OnBindViewHolder 中使用此变量的数量并确保更新 brd_increment/decrement 中的数量值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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