смотри при нажатии на предмет у меня изображения в recyclerView становиться черными и заново отображаються как сделать так чтобы они всегда отображались и не перезагружались, даже при скроле они темнеют пока на них не скрольнишся package com.example.cardsbattle.adapters;



import android.animation.LayoutTransition;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Handler;
import android.transition.AutoTransition;
import android.transition.TransitionManager;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

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

import com.airbnb.lottie.LottieAnimationView;
import com.example.cardsbattle.Activity.MainActivity;
import com.example.cardsbattle.model.Item;
import com.example.cardsbattle.R;
import com.example.cardsbattle.utilites.Constants;
import com.example.cardsbattle.utilites.PreferenceManager;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.sinaseyfi.advancedcardview.AdvancedCardView;
import com.squareup.picasso.Picasso;

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

public class InventoryAdapter extends RecyclerView.Adapter<InventoryAdapter.ViewHolder> {
    private List<Item> itemList;
    private String Legendary = "Легендарное";
    private String Mythic = "Мифическое";
    private String Epic = "Эпическое";
    private String Common = "Обычное";
    private String Slabo = "Слабое";
    private String itemName;
    private String itemPrice;
    Context context;
    private boolean isVisible = true;
    PreferenceManager preferenceManager;
    private OnItemClickedListener itemClickedListener;
    private List<Item> selectedItems = new ArrayList<>();


    public InventoryAdapter(List<Item> itemList,Context context, OnItemClickedListener itemClickedListener) {
        this.itemList = itemList;
        this.context = context;
        this.itemClickedListener = itemClickedListener;

    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item currentItem = itemList.get(position);

        // Установите данные для каждого элемента
        holder.nameTextView.setText(currentItem.getName());
        holder.priceTextView.setText(currentItem.getPrice() + " ₽");
        itemName = currentItem.getName();
        itemPrice = currentItem.getPrice();


        if (currentItem.getRarity().equals(Legendary)){
           // holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.legendary));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.legendary));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.legendary));



        } else if (currentItem.getRarity().equals(Mythic)) {
            //holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.mystic));
           // holder.cardView.setStrokeColor(context.getResources().getColor(R.color.mystic));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.mystic));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.mystic));

        } else if (currentItem.getRarity().equals(Epic)) {
           // holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.epic));
           // holder.cardView.setStrokeColor(context.getResources().getColor(R.color.epic));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.epic));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.epic));
        } else if (currentItem.getRarity().equals(Common)) {
            //holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.common));
            //holder.cardView.setStrokeColor(context.getResources().getColor(R.color.common));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.common));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.common));
        } else if (currentItem.getRarity().equals(Slabo)) {
            //holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.slabo));
           //holder.cardView.setStrokeColor(context.getResources().getColor(R.color.slabo));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.slabo));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.slabo));
        }else {
            //holder.backgroundItem.setBackgroundColor(context.getResources().getColor(R.color.black));
           // holder.cardView.setStrokeColor(context.getResources().getColor(R.color.black));
            holder.cardView.setShadowOuterColor(0,context.getResources().getColor(R.color.main));
            holder.cardView.setStroke_Color(context.getResources().getColor(R.color.main));
        }




        // Используйте Picasso для загрузки изображения
        Picasso.get().load(currentItem.getImageUrl()).into(holder.itemImageView);

        preferenceManager = new PreferenceManager(context);
        holder.selectedImageView.setVisibility(selectedItems.contains(currentItem) ? View.VISIBLE : View.GONE);

        // Добавляем обработчик нажатия на элемент списка
        holder.itemView.setOnClickListener(view -> {
            // Если предмет выбран, уберите его из списка, иначе добавьте
            if (selectedItems.contains(currentItem)) {
                selectedItems.remove(currentItem);

            } else {
                selectedItems.add(currentItem);
            }
            if (itemClickedListener != null) {
                itemClickedListener.onItemClicked(currentItem);
            }

            // Обновить отображение
            notifyDataSetChanged();
        });






        // Добавьте обработчик нажатия для кнопки "Продать", если необходимо
        holder.soldButton.setOnClickListener(v -> {
                    // поместите всю логику нажатия кнопки "Продать" сюда
            MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(v.getContext());
            materialAlertDialogBuilder.setTitle("Внимание");
            materialAlertDialogBuilder.setMessage("Вы хотите продать "+currentItem.getName().toString()+" за " + currentItem.getPrice().toString()+" ₽");
            materialAlertDialogBuilder.setNegativeButton("Нет", (dialogInterface, i) -> dialogInterface.dismiss());
            materialAlertDialogBuilder.setPositiveButton("Да", (dialogInterface, i) -> {
                clearSelectedItems();
                selectedItems.clear();
                calculateTotalSoldPrice();
                String itemId = currentItem.getId();

                if (itemId != null && !itemId.isEmpty()) {
                    FirebaseFirestore db = FirebaseFirestore.getInstance();

                    // Получение ссылки на документ в коллекции ITEMS
                    DocumentReference itemRef = db.collection(Constants.KEY_COLLECTION_ITEMS).document(itemId);

                    itemRef.delete()
                            .addOnSuccessListener(aVoid -> {
                                // Успешное удаление из базы данных
                                String userId = preferenceManager.getString(Constants.KEY_USER_ID);
                                // Теперь удалите этот элемент из коллекции пользователя
                                DocumentReference userItemRef = db.collection(Constants.KEY_COLLECTION_USERS)
                                        .document(userId)
                                        .collection(Constants.KEY_COLLECTION_ITEMS)
                                        .document(itemId);

                                userItemRef.delete()
                                        .addOnSuccessListener(aVoid1 -> {
                                            // Успешное удаление из коллекции пользователя
                                            if (position >= 0 && position < itemList.size()) {
                                                itemList.remove(position);
                                                notifyItemRemoved(position);
                                                notifyItemRangeChanged(position, getItemCount());
                                            }
                                        })
                                        .addOnFailureListener(e -> {
                                            // Обработка ошибки при удалении из коллекции пользователя
                                            Toast.makeText(context, "Не удалось продать предмет", Toast.LENGTH_SHORT).show();
                                        });
                            })
                            .addOnFailureListener(e -> {
                                // Обработка ошибки при удалении из базы данных
                                Toast.makeText(context, "Не удалось продать предмет", Toast.LENGTH_SHORT).show();
                            });

                }

                // Получаем цену продажи из текущего элемента
                String soldPriceString = currentItem.getSoldPrice();

                // Проверяем, что цена не пустая
                if (soldPriceString != null && !soldPriceString.isEmpty()) {
                    try {
                        // Преобразуем строку в число
                        int soldPrice = Integer.parseInt(soldPriceString);

                        // Получаем ID пользователя
                        String userId = preferenceManager.getString(Constants.KEY_USER_ID);

                        // Получаем доступ к базе данных Firestore
                        FirebaseFirestore db = FirebaseFirestore.getInstance();

                        // Получаем ссылку на документ пользователя
                        DocumentReference userRef = db.collection(Constants.KEY_COLLECTION_USERS).document(userId);

                        // Получаем текущий баланс пользователя
                        userRef.get().addOnSuccessListener(documentSnapshot -> {
                            if (documentSnapshot.exists()) {
                                // Получаем текущий баланс
                                Object pointsObj = documentSnapshot.get(Constants.KEY_POINTS);

                                if (pointsObj != null) {
                                    int newPoints;

                                    if (pointsObj instanceof Long) {
                                        // Если в базе данных хранится Long, преобразуем в int
                                        Long pointsLong = (Long) pointsObj;
                                        newPoints = pointsLong.intValue() + soldPrice;
                                    } else if (pointsObj instanceof Integer) {
                                        // Если в базе данных хранится Integer, используем его
                                        int points = (int) pointsObj;
                                        newPoints = points + soldPrice;
                                    } else {
                                        // Обработка других типов, если необходимо
                                        newPoints = 0; // По умолчанию
                                    }

                                    // Обновляем баланс в базе данных
                                    userRef.update(Constants.KEY_POINTS, newPoints)
                                            .addOnSuccessListener(aVoid -> {
                                                // Успешное обновление
                                                // Обновляем также баланс в PreferenceManager
                                                preferenceManager.putInt(Constants.KEY_POINTS, newPoints);
                                                // Оповещаем адаптер о изменениях

                                            })             .addOnFailureListener(e -> {
                                                // Обработка ошибки при обновлении
                                            });
                                }
                            }
                        });         } catch (NumberFormatException e) {
                        // Обработка ошибки преобразования строки в число
                    }
                }
                // Обновите видимость selectedImageView
                holder.selectedImageView.setVisibility(selectedItems.contains(currentItem) ? View.VISIBLE : View.GONE);

            });
            materialAlertDialogBuilder.show();

                    // Ваш код для продажи предмета здесь


                    // Включите кнопку, когда задача будет выполнена

        });

    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {
        ImageView itemImageView,selectedImageView;
        TextView nameTextView;
        TextView priceTextView;
        MaterialButton soldButton;
        ConstraintLayout backgroundItem;
        AdvancedCardView cardView;



        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemImageView = itemView.findViewById(R.id.itemImg);
            nameTextView = itemView.findViewById(R.id.name);
            priceTextView = itemView.findViewById(R.id.price);
            soldButton = itemView.findViewById(R.id.soldbutton);
            selectedImageView = itemView.findViewById(R.id.selectimage);
            backgroundItem = itemView.findViewById(R.id.backgroundItem);
            cardView = itemView.findViewById(R.id.cardView);
        }
    }

    public void setAllItemsSelected(boolean isSelected) {
        // Выберите все предметы
        if (isSelected) {
            selectedItems.addAll(itemList);

        } else {
            // Снять выделение со всех предметов
            selectedItems.clear();
        }

        // Обновить отображение
        notifyDataSetChanged();
    }

    public List<Item> getSelectedItems() {
        return selectedItems;
    }

    public void clearSelectedItems() {
        selectedItems.clear();
        notifyDataSetChanged();
    }

    public int calculateTotalSoldPrice() {
        int totalSoldPrice = 0;
        for (Item selectedItem : selectedItems) {
            try {
                int soldPrice = Integer.parseInt(selectedItem.getSoldPrice());
                totalSoldPrice += soldPrice;
            } catch (NumberFormatException e) {
                // Обработка ошибки преобразования строки в число
            }
        }
        return totalSoldPrice;
    }


    public interface OnItemClickedListener {
        void onItemClicked(Item item);
    }




}package com.example.cardsbattle.Fragments;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.example.cardsbattle.R;
import com.example.cardsbattle.adapters.InventoryAdapter;
import com.example.cardsbattle.databinding.FragmentInventoryBinding;
import com.example.cardsbattle.model.Item;
import com.example.cardsbattle.utilites.Constants;
import com.example.cardsbattle.utilites.PreferenceManager;
import com.google.android.flexbox.FlexDirection;
import com.google.android.flexbox.FlexboxLayoutManager;
import com.google.android.flexbox.JustifyContent;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;

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


public class InventoryFragment extends Fragment {
    FragmentInventoryBinding binding;
    private List<Item> itemList;
    private FirebaseFirestore database;
    private String userId;
    private PreferenceManager preferenceManager;
    InventoryAdapter adapter;


    private boolean isSelectAll = false;
    private int totalSoldPrice = 0;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_inventory, container, false);
        binding = FragmentInventoryBinding.bind(view);
        preferenceManager = new PreferenceManager(getActivity().getApplicationContext());
        database = FirebaseFirestore.getInstance();



        binding.selectAllButton.setOnClickListener(v -> {
            isSelectAll = !isSelectAll;
            adapter.clearSelectedItems();
            adapter.setAllItemsSelected(isSelectAll);

            updateTotalSoldPrice();

        });

        binding.sellAllButton.setOnClickListener(v -> {
                    sellAllSelectedItems();
                    binding.totalSoldPriceTextView.setText("");

                });

        userId = preferenceManager.getString(Constants.KEY_USER_ID);

        FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(requireContext());
// Устанавливаем направление
        layoutManager.setFlexDirection(FlexDirection.ROW);
// Устанавливаем сформировенные элементы на флекс линии как justifyContent: center
        layoutManager.setJustifyContent(JustifyContent.CENTER);
        binding.inventorRecyclerView.setLayoutManager(layoutManager);

        itemList = new ArrayList<>();
        adapter = new InventoryAdapter(itemList, getActivity().getApplicationContext(), new InventoryAdapter.OnItemClickedListener() {
            @Override
            public void onItemClicked(Item item) {
                updateTotalSoldPrice();
                adapter.notifyDataSetChanged();

            }
        });

        binding.inventorRecyclerView.setAdapter(adapter);

        fetchUserItems();

        return view;
    }
    private void updateTotalSoldPrice() {
        totalSoldPrice = adapter.calculateTotalSoldPrice();
        binding.totalSoldPriceTextView.setText("Сумма выбранных: " + totalSoldPrice + " ₽");
        Log.d("Total",String.valueOf(totalSoldPrice)+ " firs");
    }


    private void updateTotalSoldPrice2() {

        // Обновление баланса в базе данных
        String userId = preferenceManager.getString(Constants.KEY_USER_ID);
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        DocumentReference userRef = db.collection(Constants.KEY_COLLECTION_USERS).document(userId);

        userRef.get().addOnSuccessListener(documentSnapshot -> {
            if (documentSnapshot.exists()) {
                Object pointsObj = documentSnapshot.get(Constants.KEY_POINTS);

                if (pointsObj != null) {
                    int newPoints;

                    if (pointsObj instanceof Long) {
                        Long pointsLong = (Long) pointsObj;
                        newPoints = pointsLong.intValue() + totalSoldPrice;
                    } else if (pointsObj instanceof Integer) {
                        int points = (int) pointsObj;
                        newPoints = points + totalSoldPrice;
                    } else {
                        newPoints = 0;
                    }

                    // Вывод в лог для проверки значения newPoints
                    Log.d("BalanceUpdate", "New Points: " + newPoints);

                    userRef.update(Constants.KEY_POINTS, newPoints)
                            .addOnSuccessListener(aVoid -> {
                                preferenceManager.putInt(Constants.KEY_POINTS, newPoints);
                                fetchUserItems(); // Обновление списка предметов после успешного обновления баланса
                            })
                            .addOnFailureListener(e -> {
                                // Обработка ошибки при обновлении
                                Log.e("BalanceUpdate", "Failed to update balance", e);
                            });
                }
            }
        });
    }

    private void sellAllSelectedItems() {
        List<Item> selectedItems = adapter.getSelectedItems();

        if (!selectedItems.isEmpty()) {
            for (Item selectedItem : selectedItems) {
                sellItem(selectedItem);
            }
            adapter.clearSelectedItems();
            adapter.notifyDataSetChanged();
            updateTotalSoldPrice2(); // Перенесите вызов updateTotalSoldPrice2 сюда, чтобы обновить баланс после продажи
        } else {
            Toast.makeText(getContext(), "Выберите предметы для продажи", Toast.LENGTH_SHORT).show();
        }
    }

    private void sellItem(Item item) {
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        String itemId = item.getId();

        if (itemId != null && !itemId.isEmpty()) {
            DocumentReference itemRef = db.collection(Constants.KEY_COLLECTION_ITEMS).document(itemId);

            itemRef.delete()
                    .addOnSuccessListener(aVoid -> {
                        String userId = preferenceManager.getString(Constants.KEY_USER_ID);
                        DocumentReference userItemRef = db.collection(Constants.KEY_COLLECTION_USERS)
                                .document(userId)
                                .collection(Constants.KEY_COLLECTION_ITEMS)
                                .document(itemId);

                        userItemRef.delete()
                                .addOnSuccessListener(aVoid1 -> {

                                })
                                .addOnFailureListener(e -> {
                                    Toast.makeText(getContext(), "Не удалось продать предметы", Toast.LENGTH_SHORT).show();
                                });
                    })
                    .addOnFailureListener(e -> {
                        Toast.makeText(getContext(), "Не удалось продать предметы", Toast.LENGTH_SHORT).show();
                    });
        }
    }

    private void fetchUserItems() {
        database.collection(Constants.KEY_COLLECTION_USERS)
                .document(userId)
                .collection(Constants.KEY_COLLECTION_ITEMS)
                .orderBy("quality", Query.Direction.DESCENDING) // Сортировка по цене по возрастанию (чем больше число, тем предмет выше в списке)
                .get()
                .addOnCompleteListener(task -> {
                    if (task.isSuccessful()) {
                        itemList.clear();
                        for (DocumentSnapshot document : task.getResult()) {
                            Item item = document.toObject(Item.class);
                            if (item != null) {
                                itemList.add(item);
                                int itemCount = binding.inventorRecyclerView.getAdapter().getItemCount();
                                binding.itemSize.setText("Предметов: "+String.valueOf(itemCount));
                            }
                        }
                        adapter.notifyDataSetChanged();
                    } else {
                        // Handle the error
                    }
                });
    }
}