Вашукевич Евгений Юрьевич f6b2b77f3e first commit
2023-07-06 09:50:36 +03:00

98 lines
7.5 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<ListItem>, var contextMain:Context): RecyclerView.Adapter<MyAdapter.MyHolder>() {//ViewHolder(MyAdapter.MyHolder) - какого типа будет наш адаптер//listMain: ArrayList<String> - конструктор в который мы будем передавать список//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<TextView>(R.id.txtTitle)//Тут мы ишем наше место для текста в шалоне и делаем связь с ним чтобы передавать туда данные при заполнение //findViewById - найди мне
val tvTime= itemView.findViewById<TextView>(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<ListItem>) {//Обновление адаптера(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) мы удалили элемент
}
}