Реализуй добавление продукта в корзину при нажатии на кнопку добавить ,которая есть у каждого элемента recycleView (все должно работать в FirtFragment) :package com.example.myapp_2;

import com.example.myapp_2.List_1.Product;

import java.util.ArrayList;
import java.util.List;

public class Cart {
    private static Cart instance;

    private List<CartItem> items;

    private Cart() {
        items = new ArrayList<>();
    }

    public static Cart getInstance() {
        if (instance == null) {
            instance = new Cart();
        }
        return instance;
    }

    public void addItem(Product product) {
        for (CartItem item : items) {
            if (item.getProduct().equals(product)) {
                item.setQuantity(item.getQuantity() + 1);
                return;
            }
        }
        items.add(new CartItem(product, 1));
    }

    public void updateItem(CartItem item, int newQuantity) {
        if (newQuantity <= 0) {
            removeItem(item);
        } else {
            item.setQuantity(newQuantity);
        }
    }

    public void removeItem(CartItem item) {
        items.remove(item);
    }

    public List<CartItem> getItems() {
        return items;
    }

    public void clear() {
        items.clear();
    }

    public double getTotalPrice() {
        double totalPrice = 0;
        for (CartItem item : items) {
            totalPrice += item.getTotalPrice();
        }
        return totalPrice;
    }
}
package com.example.myapp_2;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;

public class CartAdapter extends RecyclerView.Adapter<CartItemViewHolder> {

    private List<CartItem> items;
    private OnCartItemListener listener;

    public CartAdapter(List<CartItem> items, OnCartItemListener listener) {
        this.items = items;
        this.listener = listener;
    }

    @Override
    public CartItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_cart, parent, false);
        return new CartItemViewHolder(view);
    }

    @Override
    public void onBindViewHolder(CartItemViewHolder holder, int position) {
        CartItem item = items.get(position);
        holder.bind(item, listener);
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    public void setItems(List<CartItem> items) {
        this.items = items;
        notifyDataSetChanged();
    }
}package com.example.myapp_2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class CartFragment extends Fragment {

    private TextView totalPriceTextView;
    private Button placeOrderButton;
    private RecyclerView recyclerView;

    private CartAdapter adapter;
    private Cart cart;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_cart, container, false);

// Инициализируем UI и получаем объект Cart из синглтона
        totalPriceTextView = view.findViewById(R.id.total_price_text_view);
        placeOrderButton = view.findViewById(R.id.place_order_button);
        recyclerView = view.findViewById(R.id.cart_recycler_view);

        cart = Cart.getInstance();

        adapter = new CartAdapter(cart.getItems(), new OnCartItemListener() {
            @Override
            public void onQuantityChanged(CartItem item, int newQuantity) {
                cart.updateItem(item, newQuantity);
                updateTotalPrice();
            }

            @Override
            public void onRemoveButtonClick(CartItem item) {
                cart.removeItem(item);
                adapter.setItems(cart.getItems());
                updateTotalPrice();
            }
        });

        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        updateTotalPrice();

        placeOrderButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                placeOrder();
            }
        });

        return view;
    }

    private void placeOrder() {
// Здесь должен быть код для оформления заказа
    }

    private void updateTotalPrice() {
        double totalPrice = cart.getTotalPrice();
        totalPriceTextView.setText(getString(R.string.cart_item_total_price, totalPrice));
    }
}package com.example.myapp_2;

import com.example.myapp_2.List_1.Product;

public class CartItem {
    private Product product; // сам товар
    private int quantity; // количество

    public CartItem(Product product, int quantity) {
        this.product = product;
        this.quantity = quantity;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public int getQuantity() {
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public double getTotalPrice() {
        return product.getPrice() * quantity;
    }
}

package com.example.myapp_2;

import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.myapp_2.List_1.Product;

public  class CartItemViewHolder extends RecyclerView.ViewHolder {

    private ImageView productImageView;
    private TextView productNameTextView;
    private TextView productPriceTextView;
    private TextView productTotalPriceTextView;
    private TextView productQuantityTextView;
    private Button decreaseButton;
    private Button increaseButton;
    private Button removeButton;
    private int quantity;

    public CartItemViewHolder(@NonNull View itemView) {
        super(itemView);

        productImageView = itemView.findViewById(R.id.cart_item_image_view);
        productNameTextView = itemView.findViewById(R.id.cart_item_name_text_view);
        productPriceTextView = itemView.findViewById(R.id.cart_item_price_text_view);
        productTotalPriceTextView = itemView.findViewById(R.id.cart_item_total_price_text_view);
        productQuantityTextView = itemView.findViewById(R.id.cart_item_quantity_text_view);
        decreaseButton = itemView.findViewById(R.id.cart_item_decrease_button);
        increaseButton = itemView.findViewById(R.id.cart_item_increase_button);
        removeButton = itemView.findViewById(R.id.cart_item_remove_button);
    }

    public void bind(CartItem item, OnCartItemListener listener) {
        Product product = item.getProduct();
        quantity = item.getQuantity();

        productImageView.setImageResource(product.getImageResource());
        productNameTextView.setText(product.getName());
        productPriceTextView.setText(itemView.getContext().getString(R.string.product_price, product.getPrice()));
        productTotalPriceTextView.setText(itemView.getContext().getString(R.string.cart_item_total_price, item.getTotalPrice()));
        productQuantityTextView.setText(String.valueOf(quantity));

        decreaseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                quantity -= 1;
                productQuantityTextView.setText(String.valueOf(quantity));
                listener.onQuantityChanged(item, quantity);
            }
        });

        increaseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                quantity += 1;
                productQuantityTextView.setText(String.valueOf(quantity));
                listener.onQuantityChanged(item, quantity);
            }
        });

        removeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                listener.onRemoveButtonClick(item);
            }
        });
    }
}
package com.example.myapp_2;

public interface OnCartItemListener {
    void onQuantityChanged(CartItem item, int newQuantity);//вызывается при изменении количества товара в корзине
    void onRemoveButtonClick(CartItem item);//вызывается при нажатии на кнопку удаления товара из корзины
}
package com.example.myapp_2;

import com.example.myapp_2.List_1.Product;

public interface OnProductClickListener {
    void onAddToCartClick(Product product);
}
package com.example.myapp_2;

import com.example.myapp_2.List_1.Product;

public interface OnProductClickListener {
    void onAddToCartClick(Product product);
}
package com.example.myapp_2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.myapp_2.List_1.Product;
import com.example.myapp_2.List_1.ProductAdapter;

import java.util.List;

public class ProductsFragment extends Fragment {
    private List<Product> productList;
    private RecyclerView recyclerView;
    private ProductAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_products, container, false);

// Здесь инициализируем список товаров и recyclerView

        adapter = new ProductAdapter(productList, new OnProductClickListener() {
            @Override
            public void onAddToCartClick(Product product) {
                addToCart(product);
            }
        }); // передаём метод добавления товара в корзину

        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        return view;
    }

    private void addToCart(Product product) {
// метод добавления товара в корзину
        Cart cart = Cart.getInstance();
        cart.addItem(product);
    }
}
package com.example.myapp_2.List_1;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import com.example.myapp_2.OnProductClickListener;
import com.example.myapp_2.R;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder> {
    private OnAddToCartClickListener addToCartClickListener;
    private List<Product> products;
    private Context context;

    public ProductAdapter(Context context, List<Product> products) {
        this.context = context;
        this.products = products;
    }
    private OnProductClickListener listener;
    public ProductAdapter(List<Product> products, OnProductClickListener listener) {
        this.products = products;
        this.listener = listener;
    }

    @Override
    public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_product, parent, false);
        return new ProductViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ProductViewHolder holder, int position) {
        Product product = products.get(position);
        holder.productImage.setImageResource(product.getImageResource());
        holder.productName.setText(product.getName());
        holder.productDescription.setText(product.getDescription());
        holder.productRating.setText(String.format("%.1f", product.getRating()));

// Добавлена проверка на null перед вызовом метода
        if (holder.addToCartButton != null) {
            holder.addToCartButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (addToCartClickListener != null) {
                        addToCartClickListener.onAddToCartClick(product);
                    }
                }
            });
        }
        holder.priceTextView.setText(context.getString(R.string.price, String.format("%.2f", product.getPrice())));
    }

    @Override
    public int getItemCount() {
        return products.size();
    }

    public List<Product> getProducts() {
        List<Product> products = new ArrayList<>();

        Product product1 = new Product("Product 11", "Description 11", R.drawable.food_1, 0.0f);
        products.add(product1);

        Product product2 = new Product("Product 12", "Description 12", R.drawable.food_2, 0.0f);
        products.add(product2);

        Product product3 = new Product("Product 13", "Description 13", R.drawable.food_1_3, 0.0f);
        products.add(product3);

        Product product4 = new Product("Product 14", "Description 14", R.drawable.food_1_2, 0.0f);
        products.add(product4);

        Product product5 = new Product("Product 15", "Description 15", R.drawable.food_3_4, 0.0f);
        products.add(product5);

        Product product6 = new Product("Product 16", "Description 16", R.drawable.food_1_4, 0.0f);
        products.add(product6);

        Product product7 = new Product("Product 17", "Description 17", R.drawable.food_1_1, 0.0f);
        products.add(product7);

        Product product8 = new Product("Product 18", "Description 18", R.drawable.food_1_2, 0.0f);
        products.add(product8);

        Product product9 = new Product("Product 19", "Description 19", R.drawable.food_3, 0.0f);
        products.add(product9);

        Product product10 = new Product("Product 20", "Description 20", R.drawable.food_3_4, 0.0f);
        products.add(product10);



        return products;
    }

    public void sortProductsByPrice() {
        Collections.sort(products, new Comparator<Product>() {
            @Override
            public int compare(Product o1, Product o2) {
                return Double.compare(o1.getPrice(), o2.getPrice());
            }
        });
        notifyDataSetChanged();
    }

    public class ProductViewHolder extends RecyclerView.ViewHolder {
        public Button addToCartButton;
        ImageView productImage;
        TextView productName;
        TextView productDescription;
        TextView productRating;
        // Добавлено поле priceTextView
        TextView priceTextView;

        public ProductViewHolder(View view) {
            super(view);
            productImage = view.findViewById(R.id.product_image);
            productName = view.findViewById(R.id.product_name);
            productDescription = view.findViewById(R.id.product_description);
            productRating = view.findViewById(R.id.product_rating);
            addToCartButton = itemView.findViewById(R.id.add_button);
// Присвоен элемент с id price_text_view переменной priceTextView
            priceTextView = itemView.findViewById(R.id.price_text_view);

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showRatingDialog(getAdapterPosition());
                }
            });

        }
    }

    private void showRatingDialog(final int position) {
        final RatingDialog ratingDialog = new RatingDialog(context);
        ratingDialog.setRating(products.get(position).getRating());
        ratingDialog.setOnRatingChangedListener(new RatingDialog.OnRatingChangedListener() {
            @Override
            public void onRatingChanged(float newRating) {
                products.get(position).setRating(newRating);
                notifyDataSetChanged();
            }
        });
        ratingDialog.show();
    }
    public interface OnAddToCartClickListener {
        void onAddToCartClick(Product product);
    }
    public void setOnAddToCartClickListener(OnAddToCartClickListener listener) {
        this.addToCartClickListener = listener;
    }


}