android - 如何使用 LiveData 在 ListItemView 中显示名称而不是 id?
问题描述
我是 Kotlin 新手,似乎我陷入了最简单的情况。我尝试使用正确的架构,但无法理解以下内容。我为儿子创建了一个简单的学校时间表应用程序。有教师班和学科班。两者都是房间数据库中的数据类。主题有一个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)
}
请提示我正确的方向
解决方案
推荐阅读
- amazon-web-services - 使用 ElastiCache redis 服务器和密码解析服务器
- sql - DML 中的自动递增逻辑
- swift - 为测试目标/单元测试文件禁用一些 SwiftLint 规则
- sql - 如何使用谷歌图表(饼图)将 jsonresult 数据显示为图表视图而不是 asp.net mvc 中的数组
- google-apps-script - 使用 AppsScript 从 Google 表格插入链接图表
- gatsby - Gatsby CMS - Failed to load settings from /.netlify/identity
- java - 如何在有向图Java中打印每个循环?
- ios - UISplitViewController 在细节上滑动来回导航
- php - 在另一个函数中调用控制器的索引函数
- vba - Excel For Each ws 不会进入下一个 ws