android - 传递 LiveData而不是 ViewModel时,DataBinding 不更新
问题描述
我正在使用DataBinding
,在我的ViewModel
我有一个LiveData<MyItem>
我想绑定到我的布局的对象。该项目有一个这样的属性:
@Bindable
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
notifyPropertyChanged(BR.aMOUNT);
}
问题是,如果我在中指出Fragment
:
mDataBinding.setItem(mViewModel)
在我的布局中:
<Button
...
android:enabled="@{viewModel.item.amount == 0}/>
它绑定它,一旦Item中的属性数量更改,启用或禁用按钮。好的。
当我直接传递实例而不是传递 viewModel 实例时,问题就变成了Item
:
mDataBinding.setItem(mViewModel.getItem().getValue())
在布局中:
<Button
...
android:enabled="@{item.amount == 0}/>
那么问题是它第一次正确启用/禁用按钮,但是当项目的数量属性更改时它不会更改其状态。你知道为什么会这样吗??
解决方案
可以binding.lifecycleOwner = this
在viewModel之前设置吗?此外,如果您使用片段使用lifeCycleOwner
而不是this
推荐阅读
- java - 使用 MQ JMS 连接到 IBM MQ 时出现 MQRC_NOT_AUTHORIZED 错误
- javascript - js 中的 fetch() - 将新对象添加到 json 服务器
- npm - 如何从 dayjs https://www.npmjs.com/package/dayjs 动态获取语言环境?
- scala - 类型不匹配错误。在 Scala Spark 中发现 Array[String] 需要 Seq[?]
- javascript - 如何关闭两条平行的二次贝塞尔曲线的路径,其中每条曲线都以 MoveTo 标记开头
- azure - 用于检查 azure 表存储中的行是否包含特定值的逻辑应用
- vue.js - Vue在getter中链接多个过滤器
- r - 在 r 中使用 rvest 包和 selectorgadget 工具进行网页抓取
- latex - 一个 \cite 弄乱了我的其他引文
- google-sheets - Google 电子表格 - 从第二列返回最接近的值