package com.example.rehabilitation.db import android.annotation.SuppressLint import android.content.Context import android.content.Intent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.example.rehabilitation.R import com.example.rehabilitation.fragment.User.CalendarFragment class MyAdapter(listMain: ArrayList, var contextMain:Context): RecyclerView.Adapter() {//ViewHolder(MyAdapter.MyHolder) - какого типа будет наш адаптер//listMain: ArrayList - конструктор в который мы будем передавать список//contextMain:Context - принимаемый контекст c MainActivity private var listArray = listMain//listArray - переменная которая дас нам возможность работать со списком, то есть так как она находится в конструкторе, где он не доступен, и за счет переменно на уровне класса мы получим его данные(список) var context = contextMain//Делаем принимаемый контекст доступным class MyHolder(itemView: View, contextView: Context) : RecyclerView.ViewHolder(itemView) {//Класс который будет отвечать за элемент который будет добавляться на экран, то етсь дял каждого эленмента на экране будет свой MyHolder, он соджержит в себе элементы котрые будут содержаться в выведенном элементе var context2 = contextView// val tvTitel = itemView.findViewById(R.id.txtTitle)//Тут мы ишем наше место для текста в шалоне и делаем связь с ним чтобы передавать туда данные при заполнение //findViewById - найди мне val tvTime= itemView.findViewById(R.id.txtTime) fun setData(item: ListItem){//Функция для прередачи текста в шаблон при его выводе tvTitel.text = item.title//Передаем текст title tvTime.text = item.time//Передаем время itemView.setOnClickListener { val intent = Intent(context2, CalendarFragment::class.java).apply { //Передаем контекст(context2), чтобы запустить следуюшее активити//.apply - что бы передать через putExtra все что нам нужно putExtra(MyIntentConstans.ITEM_TITLE_KEY, item.title)//Передача на другой экран Title putExtra(MyIntentConstans.ITEM_DESK_KEY, item.desc) putExtra(MyIntentConstans.ITEM_URI_KEY, item.uri) putExtra(MyIntentConstans.ITEM_ID_KEY, item.id) } context2.startActivity(intent)//Передаем на следуюший экран весь intent, то ест мы хотим открыть EditActivity и передать на него title, desc и uri//intent - то что мы хотим запустить } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyHolder {//Функция где мы создапем наш шаблон, то есть которая из XML шаблона rc_item сделает нам нужный объект, в который мы и бьудем передавать данные val inflater = LayoutInflater.from(parent.context).inflate(R.layout.rc_item, parent, false)//.from(parent.context) - контекст //inflater - специальный класс который надувает наш XML шаблон и деалет из него объект, который и будет нарисован на нашем экране return MyHolder(inflater, context)//.inflate() - надуй //R.layout.rc_item - что будем надуваем //parent - root элемент } override fun onBindViewHolder(holder: MyHolder, position: Int) {//Функция запускается когда на шаблон создатся в onCreateViewHolder, то есть тут мы будем иметь информацию о нашем textView и его позицию, и будим его заполнять holder.setData(listArray[position])//Через функцию передаем все элементы в список } override fun getItemCount(): Int {//Данная функция сообщает нашему адаптеру сколько элементом нужно будет вывести на экран(количество элементов в списке) return listArray.size//Возвращаем размер } @SuppressLint("NotifyDataSetChanged") fun updateAdapter(listItem: List) {//Обновление адаптера(MyAdapter)//Данная функция юудт брать массив listArray, будет его очишать, добовлять другой массив(новый - уже с обновленными данными) и сообщаем с помошью специалной команды, что данные изменились и MyAdapter все перерисует listArray.clear()//Очистка прошлых данных в листе listArray.addAll(listItem)//Передаем в лист лист с обновленными данными notifyDataSetChanged()//Команда сообщающая MyAdapter, что данные обновились и MyAdapter все перезапишет и выведет }//listItem - сюда рпередаем список из базы данных fun removeItem(position: Int,dbManeger: MyDbManeger) {//Функция для удаления ячейки котрую мы свайпнули и обновления списка, что бы когда мы перезашил элемент неожиданно снова бы не появился и убарть с адаптера и предупредить адаптер, что мы убрали элемент dbManeger.removeItemDeleteFromDB(listArray[position].id.toString())//Передаем тут объект дял удаления из базы данных//.toString() - для передачи в базу данных его конвертирвоаь в String listArray.removeAt(position)//Передаем что список уменьшился notifyItemChanged(0, listArray.size)//Говорим адаптеру, что элементов теперь меньше и теперь длина элементов внутри меньше и нужно указать где начинается, а где заканчивается//(0, listArray.size): 0 - это начало, listArray.size - это новый размер,Ю так как мы перезаписали наш лист, там теперь новое количество обьектов и этот рамер листа и будет нашим пределом notifyItemRemoved(position)//Передаем что на данной позиции(position) мы удалили элемент } }