我正在研究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
而不是LiveData
。LiveData
是只读的,不能编辑LiveData
类型的对象。
您应该看看这个用于ViewModel的代码实验室,或者这个用于Room的代码实验室。谷歌建议使用等后台属性
private val _week = MutableLiveData<Week>()
val week: LiveData<Week>
get() = _week
然后在XML中可以使用
android:text="@{viewModel.week.date}"