android - 如何使用数据绑定动态设置 app:icon?
问题描述
我有这个 XML:
<Button
android:id="@+id/btn_default"
app:icon="@{model.actionBarData.myDynamicIcon}" />
我在模型的 actionBarData 中有这个方法和 LiveData 以编程方式设置图标:
private var _myDynamicIcon = MutableLiveData<Int>()
val myDynamicIcon: LiveData<Int>
get() = _myDynamicIcon
// Called by some logic in my app
fun setMyDynamicIcon() {
_myDynamicIcon.value = when (status) {
status.STATUS1 -> R.drawable.icon1
status.STATUS2 -> R.drawable.icon2
status.STATUS3 -> R.drawable.icon3
}
}
我希望图标在setMyDynamicIcon
被调用时改变。但是我得到错误:
Cannot find a setter for <android.widget.Button app:icon> that accepts parameter type 'androidx.lifecycle.LiveData<java.lang.Integer>'
我也尝试在 中存储一个Drawable
对象myDynamicIcon
,这也不起作用(相同的错误但 Drawable
类型)。
如何设置app:icon
通过数据绑定?
解决方案
您可以使用Binding Adapters,您只需setMyDynamicIcon()
稍微更改您的实现(即,使其成为绑定适配器方法),其他代码几乎是从提供的链接复制/粘贴,它会正常工作。