Загрузка данных


import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.RatingBar
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class RecipeAdapter(
    private var recipeList: List<RecipeItem>,
    private val onItemClick: (RecipeItem) -> Unit
) : RecyclerView.Adapter<RecipeAdapter.RecipeViewHolder>() {

    class RecipeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val image: ImageView = itemView.findViewById(R.id.ivRecipeImage)
        val title: TextView = itemView.findViewById(R.id.tvRecipeTitle)
        val subtitle: TextView = itemView.findViewById(R.id.tvRecipeSubtitle)
        val calories: TextView = itemView.findViewById(R.id.tvRecipeCalories)
        val rating: RatingBar = itemView.findViewById(R.id.rbRecipeRating)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecipeViewHolder {
        // Подключаем наш отдельный XML-файл карточки
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_recipe, parent, false)
        return RecipeViewHolder(view)
    }

    override fun onBindViewHolder(holder: RecipeViewHolder, position: Int) {
        val item = recipeList[position]

        // Карточка заполняется данными автоматически
        holder.title.text = item.title
        holder.subtitle.text = item.description
        holder.calories.text = "${item.calories} ккал"
        holder.rating.rating = item.rating
        holder.image.setImageResource(item.imageResId)

        // Клик по карточке для перехода к подробному описанию/видео
        holder.itemView.setOnClickListener {
            onItemClick(item)
        }
    }

    override fun getItemCount(): Int = recipeList.size

    // Метод для обновления списка при поиске или фильтрации
    fun updateData(newList: List<RecipeItem>) {
        recipeList = newList
        notifyDataSetChanged()
    }
}