Data Binding下ImageView透明度无法动态更新的问题求助
解决ImageView透明度不随Model属性更新的问题
嗨,我来帮你搞定这个问题!首先咱们拆解下为什么TextView能正常更新,唯独ImageView的透明度必须重启Activity才生效:
1. 先修正XML里的拼写错误
你在ImageView的alpha表达式里把equals拼成了eqals——这个小错误直接导致DataBinding没法正确识别表达式里的依赖关系,自然也就不会在stringAttribute变化时重新计算透明度了。
另外,既然你已经导入了TextUtils,咱们用TextUtils.isEmpty()来判断会更严谨,能同时处理null和空字符串的情况,比直接判断equals("")靠谱多了。修正后的XML代码如下:
<data> <import type="android.text.TextUtils"/> <variable name="model" type="myPackage.Model"/> </data> <TextView android:text="@={model.stringAttribute}"/> <ImageView android:alpha='@{TextUtils.isEmpty(model.stringAttribute) ? 0.5f : 1.0f }' android:src="@drawable/thing"/>
2. 修复Model里的语法小问题
你的setStringAttribute方法里漏了分号,虽然你说TextView能正常更新(可能是粘贴代码时的笔误),但这个小问题可能会导致某些场景下属性变化通知失效,还是修正掉更稳妥:
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用了双向绑定@={model.stringAttribute},双向绑定的机制相对更“健壮”,即使表达式有小问题可能还能触发更新;但ImageView的单向绑定完全依赖正确的表达式来建立和stringAttribute的依赖关系,拼写错误直接让DataBinding没法监听属性变化,所以只有Activity重启重建绑定时才会计算一次透明度。
按照上面的步骤修正后,再调用model.setStringAttribute()更新属性时,ImageView的透明度会自动跟着变化,不用再重启Activity啦!
内容的提问来源于stack exchange,提问作者jared
相关产品推荐
相关产品推荐

