сущность:
@Entity(tableName = "toDoTasks", foreignKeys = [(ForeignKey(entity = Project::class, parentColumns = ["id"], childColumns = ["projectId"]))])
data class ToDoTask (
@PrimaryKey(autoGenerate = true) var id: Long = 0,
@ColumnInfo(name = "title") var title: String,
@ColumnInfo(name = "isDone") var isDone: Boolean,
@ColumnInfo(name = "projectId") var projectId: Long)
DAO:
@Query("SELECT * FROM toDoTasks WHERE projectId=:projectId")
fun loadTasksByProject(projectId: Long) : LiveData<List<ToDoTask>>
Репозиторий:
fun getTasks(projectId: Long): LiveData<List<ToDoTask>> {
return GetTaskAsyncTask(tasksDao).execute(projectId).get()
}
private class GetTaskAsyncTask(val dao: TasksDao) : AsyncTask<Long, Void, LiveData<List<ToDoTask>>>() {
override fun doInBackground(vararg id: Long?): LiveData<List<ToDoTask>> {
val saveId = id[0] ?: throw NullPointerException("Project id should not be null")
return dao.loadTasksByProject(saveId)
}
}
Вью модель:
private val repository: Repository = Repository(application)
private var projects: LiveData<List<Project>> = repository.getProjects()
var selectedProjectId: Long = 1
private var tasks: LiveData<List<ToDoTask>> = repository.getTasks(selectedProjectId)
fun getProjects() = projects
fun getTasks() = tasks
И, наконец, сам обсерв в OnCreateView фрагмента: :)
mainViewModel.getTasks().observe(this, Observer<List<ToDoTask>> { tasks ->
val saveTasks = tasks ?: NullPointerException("Tasks should not be null")
viewAdapter.updateTasks(saveTasks as List<ToDoTask>)
})
projectId меняется так:
override fun onProjectSelected(id: Long) {
tasksFragment = TasksFragment.newInstance(id)
mainViewModel.selectedProjectId = id
replaceFragment(tasksFragment, TASKS_TAG)
}