首页 > 解决方案 > 传递 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}/>

那么问题是它第一次正确启用/禁用按钮,但是当项目的数量属性更改时它不会更改其状态。你知道为什么会这样吗??

标签: androidmvvmandroid-livedataandroid-databindingandroid-viewmodel

解决方案


可以binding.lifecycleOwner = this在viewModel之前设置吗?此外,如果您使用片段使用lifeCycleOwner而不是this


推荐阅读