Я Kotlin новичок ie и кажется, что застрял в простейшем случае. Я пытаюсь использовать правильную архитектуру, но не могу понять следующее. Я создаю простое приложение школьного расписания для моего сына. Существует класс учителя и предметный класс. Оба являются классами данных в базе данных комнаты. У субъекта есть teacher_id. У меня есть RecyclerView со списком предметов. Идея состоит в том, чтобы показать имя учителя в предметной карточке. Но я не могу понять, как получить и показать имя учителя вместо subject.teacher_id, используя лучшие / правильные методы.
Фрагмент SubjectsViewModel:
class SubjectsViewModel(
val database: SchoolScheduleDao,
application: Application
) : AndroidViewModel(application) {
val db = database
...
val subjects_list = db.getAllSubjects()
val teachers_list = db.getAllTeachers()
...
fun getTeacherFromList(teacher_id: Long): String {
var tName:String = ""
var lTeacher: Teacher? = teachers_list.value?.find { it.teacherId == teacher_id }
if (lTeacher != null){
tName = lTeacher.firstName + " " + lTeacher.secondName + " " + lTeacher.thirdName
}
return tName
}
...
}
Фрагмент SubjectsAdapter:
class SubjectsAdapter(val clickListener: SubjectsListener): ListAdapter<Subject, SubjectsAdapter.ViewHolder>(SubjectsDiffCallback()) {
class ViewHolder private constructor (val binding: ListItemSubjectBinding) : RecyclerView.ViewHolder(binding.root){
companion object {
fun from(parent: ViewGroup): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding =
ListItemSubjectBinding.inflate(layoutInflater, parent, false)
return ViewHolder(binding)
}
}
fun bind(item: Subject, clickListener: SubjectsListener) {
binding.subject = item
val res = binding.root.context.resources
binding.subjectName.text = item.name
binding.roomNumber.text = item.roomNumber
binding.teacherOfSubject.text = /*??? how to get Teacher.Name from here? I suppose if I use my SubjectsViewModel.getTeacherFromList(subject.teacher_id) here it is not a good practice*/
binding.clickListener = clickListener
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder.from(parent)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position)!!, clickListener)
}
}
...
class SubjectsListener(val clickListener: (ts: Subject) -> Unit) {
fun onClick(subject: Subject) = clickListener(subject)
}
Пожалуйста, подскажите мне правильное направление