【发布时间】:2022-09-24 21:48:13
【问题描述】:
我正在使用Room,并且我编写了Dao 类,如下所示。
道
@Dao
interface ProjectDao {
@Query(\"SELECT * FROM project\")
fun getAllProjects(): Flow<List<Project>>
...etc
}
而这个Flow在ViewModel中通过asLiveData()转换为LiveData,如下使用。
视图模型
@HiltViewModel
class MainViewModel @Inject constructor(
private val projectRepo: ProjectRepository
) : ViewModel() {
val allProjects = projectRepo.allProjects.asLiveData()
...
}
活动
mainViewModel.allProjects.observe(this) { projects ->
adapter.submitList(projects)
...
}
当数据发生变化时,RecyclerView 会被Observer 自动更新。这是我知道的一个正常的例子。
但是,在我Flow中的项目数据中,从列表中获取所选位置的数据最正确的方法是什么?
我已经编写了从已转换为LiveData 的数据中返回值的代码,但我认为可能有比这个解决方案更好的代码。
private fun getProject(position: Int): Project {
return mainViewModel.allProjects.value[position]
}
请给我建议
标签: android android-room android-livedata android-architecture-components android-viewmodel