使用数据绑定更新drawable

时间:2018-05-16 17:10:01

标签: android android-layout android-databinding

我有一个ImageView,我根据字符串是否存在来更改alpha。

XML

<data>
    <import type="android.text.TextUtils"/>
    <variable name="model" type="myPackage.Model"/>
</data>

<TextView
    android:text="@={model.stringAttribute}"/>

<ImageView
    android:alpha='@{model.stringAttribute.eqals("") ? 0.5f : 1.0f }'
    android:src="@drawable/thing"/>

在我的activity

binding.setModel(model);

除了ImageView上的alpha仅在重新启动活动时更新时,此方法才有效。我试过在@之后添加等号但是不会编译。

模型

public class Model extends BaseObservable {
    private String stringAttribute;
    public void setStringAttribute(String s) {
        stringAttribute = s
        notifyPropertyChanged(BR.stringAttribute)
    }
    @Bindable
    public String getStringAttribute() {
        return stringAttribute;
    }
}

并且澄清一下,TextView在模型更改时更新。它只是ImageView上的alpha,在活动重新启动之前不会更新。

2 个答案:

答案 0 :(得分:0)

<data>
    <import type="android.text.TextUtils"/>
    <variable name="model" type="yourPackage.MainViewModel"/>
</data>

...

<ImageView
    android:alpha='@{TextUtils.isEmpty(model.stringAttribute) ? 0.5 : 1.0 }'
    android:src="@drawable/thing"/>

确保您还从

等活动中设置model
binding.setModel(model);

答案 1 :(得分:0)

=用于双向绑定,这对于imageView没有任何意义(用户无法更改图像)。您没有显示myPackage.Model的代码。确保模型扩展了BaseObservable(还有其他方法可以做到这一点)并且stringAttribute的setter正在调用notifyChange()notifyPropertyChanged(),例如:

public void setStringAttribute(String val) {
    . . .
    notifyPropertyChanged(BR.stringAttribute);
}