计算购物车中的总金额?

时间:2020-03-23 04:31:15

标签: android firebase android-studio android-layout google-cloud-firestore

我在RecylerView的项目列表中找不到总价。我从消防站得到了价格,然后乘以数量,但是如何在recylerView中获得添加项目的总价格。我的问题是未计算项目的总成本。 谢谢! 我的代码:

 public class ItemCartRecyelerAdapter extends FirestoreAdapter<ItemCartRecyelerAdapter.ViewHolder>{

private static final String TAG = "ItemRecyelerAdapter";



public interface OnItemSelectedListener {
    void OnItemSelected(DocumentSnapshot item);

}

private OnItemSelectedListener mListener;


public ItemCartRecyelerAdapter(Query query, OnItemSelectedListener listener) {
    super(query);
    mListener = listener;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    return new ViewHolder(inflater.inflate(R.layout.item_cart_adapter,parent,false));
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
    holder.bind(getSnapshot(position), mListener);
}

public void deleteItem(int position){
    getSnapshot(position).getReference().delete();
}


static class ViewHolder extends RecyclerView.ViewHolder {
    TextView item_name, item_company, item_price, discount_price, discount;
    ImageView item_image, subtract_image;
    ElegantNumberButton quantityPicker;

    private int TotalPrice = 0;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        item_image = itemView.findViewById(R.id.itemImageView);
        item_company = itemView.findViewById(R.id.item_company);
        item_price = itemView.findViewById(R.id.item_price);
        item_name = itemView.findViewById(R.id.item_name);
        quantityPicker = itemView.findViewById(R.id.quantityPicker);
        subtract_image = itemView.findViewById(R.id.subtract_image);
        discount_price = itemView.findViewById(R.id.item_discount_price);
        discount = itemView.findViewById(R.id.discount);

    }

    public void bind(final DocumentSnapshot snapshot, final OnItemSelectedListener listener) {

        final Attachment attachment = snapshot.toObject(Attachment.class);
        Resources resources = itemView.getResources();


        item_name.setText(attachment.getItem_name());
        item_company.setText(attachment.getItem_brand());
        discount.setText(String.valueOf(attachment.getItem_discount()) + "%\noff");
        quantityPicker.setNumber(String.valueOf(attachment.getItem_quantity()));


        if (attachment.getItem_discount() != null && attachment.getItem_discount() != 0) {
            subtract_image.setVisibility(View.VISIBLE);
            discount_price.setVisibility(View.VISIBLE);
            discount.setVisibility(View.VISIBLE);

            Integer discountedPrice = attachment.getItem_price() * attachment.getItem_discount() / 100;
            Integer priceDiscounted = attachment.getItem_price() - discountedPrice;
            discount_price.setText(String.valueOf(priceDiscounted));
        }

        Log.d(TAG, "bind: Urs: " + attachment.getUrls());
        for (Map.Entry<String, String> result : attachment.getUrls().entrySet()) {
            String key = result.getKey();
            String value = result.getValue();
            Log.d(TAG, "bind: Urls+valuew" + key + value);

            //Load Image
            Glide.with(item_image.getContext())
                    .load(value)
                    .into(item_image);
        }


        quantityPicker.setRange(0, 10);

        quantityPicker.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {


            @Override
            public void onValueChange(ElegantNumberButton view, int oldValue, int newValue) {
                Log.d(TAG, "onValueChange: postion " + attachment.getItem_id());
                Log.d(TAG, String.format("oldValue: %d   newValue: %d", oldValue, newValue));

                passData(newValue, attachment.getItem_id(), oldValue);

            }


            private void passData(int newValue, String item_id, int oldValue) {
                // Go to the details page for the selected restaurant

                //sharing to seperate cart node in store

                if (newValue == 0) {
                    FirebaseFirestore updateQ = FirebaseFirestore.getInstance();
                    DocumentReference CartREf = updateQ.collection("Cart")
                            .document(item_id);
                    CartREf.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "onSuccess: Succed to quantity");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.d(TAG, "onFailure: Failed to change cart");
                        }
                    });

                    FirebaseFirestore dQ = FirebaseFirestore.getInstance();
                    DocumentReference QuanityRef = dQ.collection("fruits & vegetables")
                            .document("UyGXpk2n1A6mHsUcYjCi")
                            .collection("Organic Fruits")
                            .document(item_id);
                    QuanityRef.update("item_quantity", newValue).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "onSuccess: Success updated item_quanity in Products");
                        }
                    });
                }

                Log.d(TAG, "passData: new update StrARTED");
                FirebaseFirestore updateQ = FirebaseFirestore.getInstance();
                DocumentReference CartREf = updateQ.collection("Cart")
                        .document(item_id);
                CartREf.update("item_quantity", newValue).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Succed to quantity");
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: Failed to change cart");
                    }
                });

                Log.d(TAG, "passData: new update StrARTED");
                FirebaseFirestore dQ = FirebaseFirestore.getInstance();
                DocumentReference QuanityRef = dQ.collection("fruits & vegetables")
                        .document("UyGXpk2n1A6mHsUcYjCi")
                        .collection("Organic Fruits")
                        .document(item_id);
                QuanityRef.update("item_quantity", newValue).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.d(TAG, "onSuccess: Succed to quantity");
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.d(TAG, "onFailure: Failed to change cart");
                    }
                });
            }
        });


        int items_price = attachment.getItem_price() * attachment.getItem_quantity();
        item_price.setText("INR " + items_price + "Rs");

        TotalPrice += TotalPrice + items_price;
        Log.d(TAG, "bind: Toatal = " + TotalPrice);

        //Click Listener
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (listener != null) {
                    listener.OnItemSelected(snapshot);
                }
            }
        });

    }

我以这种方式尝试过,但是我只能得到单项结果。

    int items_price = attachment.getItem_price() * attachment.getItem_quantity();
    item_price.setText("INR " + items_price + "Rs");

    TotalPrice += TotalPrice + items_price;
    Log.d(TAG, "bind: Toatal = " + TotalPrice);

2 个答案:

答案 0 :(得分:0)

private int items_total_price =0;


  public void bind(final DocumentSnapshot snapshot, final OnItemSelectedListener 
     listener) {

    final Attachment attachment = snapshot.toObject(Attachment.class);
    items_total_price+=attachment.getItem_price()

    //////////// } //when the recycle view comes to the last item you will have the total items' price

答案 1 :(得分:0)

您必须在

中执行此操作

onBindViewHolder

private int total_price = 0;

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
    final Attachment attachment = getSnapshot(position).toObject(Attachment.class);
    total_price += attachment.getItem_price()
}