Есть две таблицы, Task и StatisticsTask для комнаты Android, StatisticsTask имеет внешний ключ taskId для Task.id.Когда я обновляю StatisticsTask, как снова сообщить данные запроса пользовательского интерфейса?
@Entity
@Parcelize
data class Task(
var name: String,
var important: Boolean = false,
var startTime: String = timeHm(),
var endTime: String = "",
var remind: String = "",
var repeat: String = "",
var repeatInterval: String = "",
var desc: String = "",
var endDate: String = "",
var startDate: String = nowOfString(),
@PrimaryKey(autoGenerate = true) var id: Int = 0
) : Parcelable {
@Ignore
var selected = false
@Ignore
var time: String? = null
@Ignore
var finished: Boolean = false
}
@Entity(foreignKeys = [ForeignKey(entity = Task::class, parentColumns = arrayOf("id"), childColumns = arrayOf("taskId"),
onDelete = CASCADE)])
@Parcelize
data class StatisticsTask(
var taskId: Int,
var date: Calendar?,
var finish: Boolean = false,
@PrimaryKey(autoGenerate = true)
var id: Int = 0
) : Parcelable {
}
//TaskViewModel.kt
fun finishTask(task: Task) {
launch {
statisticsTaskDao.updateById(task.id, !task.finished)
}
}
@Dao
interface StatisticsTaskDao {
@Query("update statisticstask set finish = :finish where taskId=:taskId and date = :date")
fun updateById(taskId: Int, finish: Boolean, date:Calendar = thisDayInitial())
}
//in my fragment
val model = ViewModelProviders.of(this)[TaskViewModel::class.java]
model.getAllOfToday().observe(this, Observer<List<Task>> {
//udpate data to adapter
})
//I want to finish this task here(in adapter)
iv_finished.setOnClickListener {
//task: first item in adapter
model.finishTask(task)
//This not work. when I finish task, how to update data again?
model.getAllOfToday()
}
Это для android-room 2.2.0-rc1, Androidстудия 3.5.Как сообщить данные запроса базы данных снова?Я пытался вызвать это снова не работает: model.getAllOfToday (). Наблюдаем (this @ TodayFragment, Observer> {dispatchData (it)})