首页 > 解决方案 > 如何使用数据绑定动态设置 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通过数据绑定?

标签: androidandroid-xmlandroid-databindingandroid-livedata

解决方案


您可以使用Binding Adapters,您只需setMyDynamicIcon()稍微更改您的实现(即,使其成为绑定适配器方法),其他代码几乎是从提供的链接复制/粘贴,它会正常工作。


推荐阅读