我有一个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,在活动重新启动之前不会更新。
答案 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);
}