ViewModel 的 LiveData 值未使用双向数据绑定进行更新



我正在研究Android Jetpack的组件,我试图用这个复制一个类似的应用程序

在我的ViewModel中,有一个对Room数据库的查询,该数据库返回LiveData对象

class EditWeekViewModel internal constructor(
private val weekRepository: WeekRepository,
private val id: Int
) : ViewModel() {
var week: LiveData<Week> = weekRepository.getWeek(id)
}

我在布局中声明了我的ViewModel变量

<data>
<import type="com.pascaciorc.turniptracker.data.Week" />
<variable
name="viewModel"
type="com.pascaciorc.turniptracker.viewmodels.EditWeekViewModel" />
</data>

这个EditText应该做双向数据绑定

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={viewModel.week.date}"/>

但我似乎无法使双向绑定工作

LiveData对象是否有问题?

这是我的刀

@Query("SELECT * FROM week where id = :id")
fun getWeek(id: Int): LiveData<Week>

您应该使用MutableLiveData而不是LiveDataLiveData是只读的,不能编辑LiveData类型的对象。

您应该看看这个用于ViewModel的代码实验室,或者这个用于Room的代码实验室。谷歌建议使用等后台属性

private val _week = MutableLiveData<Week>()
val week: LiveData<Week>
get() = _week

然后在XML中可以使用

android:text="@{viewModel.week.date}"

最新更新