【发布时间】:2021-02-25 22:07:19
【问题描述】:
我正在使用 JetPack 架构编写 android 应用程序(我也在使用 Sunflower 应用程序作为灵感)。
我有任务列表的回收站视图。为了得到它们,我在视图模型中使用了以下函数。并且初始加载工作正常。
但是我也有日期选择器,我想在其中将finishedDate 更新为新日期以获取其他日期的已完成任务。
更新 finishedDate 变量或调用另一个 getTasksByFinishedDate 函数来重新分配任务(在将范围从 val 更改为 var 之后)不会产生任何效果。我仍然只显示初始任务。
此字段 (LiveData) 的观察功能正常工作,因为如果我添加具有当前显示的完成日期的新任务,我将在 UI 上看到它。
我只是无法在初次通话后将它们过滤到不同的日期。
代码如下:
视图模型:
fun updateDate(year: Int, month: Int, day: Int) {
finishedDate.set(Calendar.YEAR, year)
finishedDate.set(Calendar.MONTH, month)
finishedDate.set(Calendar.DAY_OF_MONTH, day)
// tasks: LiveData<List<Task>> = taskRepository.getTasksByFinishedDate(finishedDate)
}
val tasks: LiveData<List<Task>> = taskRepository.getTasksByFinishedDate(finishedDate)
道:
@Query("SELECT * FROM task WHERE finishedDate = :finishedDate")
fun getTasksByFinishedDate(finishedDate: Calendar): LiveData<List<Task>>
片段订阅 UI:
ViewModel.tasks.observe(viewLifecycleOwner) { result ->
adapter.submitList(result)
}
日期选择器:
private val model: NewTaskViewModel by activityViewModels()
override fun onDateSet(view: DatePicker, year: Int, month: Int, day: Int) {
this.year = year
this.month = month
this.day = day
model.updateDate(year, month, day)
}
【问题讨论】:
-
您是否正在更新 ROOM 中的字段?
标签: android kotlin android-room android-livedata android-jetpack