使用LiveData <Drawable>进行数据绑定会使BindingAdapter上的值无效吗?

我在使用数据绑定更新drawableLeft的{​​{1}}时遇到问题。

我的实时数据:

TextView

我的绑定适配器:

val iconLiveData = MutableLiveData<Drawable>()

布局中的TextView:

@BindingAdapter("drawableLeft")
fun TextView.setDrawableLeft(drawable: Drawable?) {
    Timber.d("Setting drawable from adapter: $drawable")
    setCompoundDrawablesWithIntrinsicBounds(drawable,null,null)
}

更改可绘制图形的代码:

<TextView
    ...removed all other params for simplicity
    drawableLeft="@{viewModel.iconLiveData}"/>

这是我执行值更改时发生的事情:

val drawable = repository.getDrawable(R.drawable.ic_google_fit)
                Timber.d("Setting drawable: $drawable")
                iconLiveData.value = drawable

2019-11-04 14:49:51.296 23568-23568 D/LOG: Setting drawable: android.graphics.drawable.VectorDrawable@347943e 2019-11-04 14:49:51.298 23568-23568 D/LOG: Setting drawable from adapter: null 进入Drawable,但是当它进入LiveData时,它为空。看来BindingAdapter无法通过Drawable传递,但我对此没有任何确认。

对于原因,我不能使用资源而不是可绘制对象。

zhw_19890108 回答:使用LiveData <Drawable>进行数据绑定会使BindingAdapter上的值无效吗?

当我在数据绑定中实现实时数据时,我发现存在很多类型问题,它们会触发具有空值的绑定适配器。

首先,尝试在不使用livedata的数据绑定中注入drawable。例如:在活动/片段中,从实时数据中获取可绘制的值,并将其放入数据绑定中。查看drawable是否为null。 如果drawable不为null,则数据绑定库很可能会与bindingadapter中的drawableLeft类型混淆。

您还可以尝试阅读生成的数据绑定代码,以了解幕后情况以及在数据绑定中使用实时数据失败的地方。

数据绑定属性“ drawableLeft”的名称可能会导致错误,因为它是框架中使用的数据绑定库中的字符串。

我很想听听您的问题,以了解您如何解决此问题。

本文链接:https://www.f2er.com/3166172.html

大家都在问