Android RecyclerView 恢复对象中的状态

android recyclerview restoring state in object

提问人:Abm 提问时间:10/7/2022 更新时间:10/7/2022 访问量:27

问:

该应用程序的功能类似于购物车。用户可以通过单击相应的按钮来添加产品并增加/减少数量。默认情况下,数量值设置为 1。每当用户将新产品添加到recyclerview时,我都会遇到一个问题,以前的产品数量也更改为1。如何避免这种情况?如何恢复对象中的状态(递增/递减值)?

 @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));
        }
    });
Java Android 对象 android-recyclerview savestate

评论

0赞 Björn 10/7/2022
您应该将数量作为数据模型的一部分,这样您就不会在绑定时将其设置为“1”,而是将其设置为更新的值。根据您的用例,您可以通过使用 ViewModel 来保存视图数据,使这些值在视图重新创建中也能够幸存下来。如果您想要一个简单的快速修复,只需使用 ViewHolder 上的变量来保存数量。

答:

0赞 Björn 10/7/2022 #1

可以将数量添加到 OrderBrdDataModel 中,或将 OrderBrdDataModel 包装在类似 OrderBrdDataModelWithQuantity 中。在 OnBindViewHolder 中,使用此变量中的数量,并确保以 brd_increment/递减为单位更新数量值。

评论

0赞 Abm 10/8/2022
filteredList.get(holder.getAdapterPosition()).setBrdqty(number);notifyDataSetChanged();这是我写的,但它不起作用。