98 lines
7.5 KiB
Kotlin
98 lines
7.5 KiB
Kotlin
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) мы удалили элемент
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|