Android 与LiveData的数据绑定<;可拉伸>;使BindingAdapter上的值为空?

Android 与LiveData的数据绑定<;可拉伸>;使BindingAdapter上的值为空?,android,android-databinding,Android,Android Databinding,使用数据绑定更新TextView的drawableLeft时遇到问题 我的实时数据: val iconLiveData = MutableLiveData<Drawable>() @BindingAdapter("drawableLeft") fun TextView.setDrawableLeft(drawable: Drawable?) { Timber.d("Setting drawable from adapter: $drawable") setCompo

使用数据绑定更新
TextView
drawableLeft
时遇到问题

我的实时数据:

val iconLiveData = MutableLiveData<Drawable>()
@BindingAdapter("drawableLeft")
fun TextView.setDrawableLeft(drawable: Drawable?) {
    Timber.d("Setting drawable from adapter: $drawable")
    setCompoundDrawablesWithIntrinsicBounds(drawable, null, 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
版面中的文本视图:

val iconLiveData = MutableLiveData<Drawable>()
@BindingAdapter("drawableLeft")
fun TextView.setDrawableLeft(drawable: Drawable?) {
    Timber.d("Setting drawable from adapter: $drawable")
    setCompoundDrawablesWithIntrinsicBounds(drawable, null, 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
以下是我执行值更改时发生的情况:

val iconLiveData = MutableLiveData<Drawable>()
@BindingAdapter("drawableLeft")
fun TextView.setDrawableLeft(drawable: Drawable?) {
    Timber.d("Setting drawable from adapter: $drawable")
    setCompoundDrawablesWithIntrinsicBounds(drawable, null, 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
无法通过
LiveData
传递,但我找不到任何确认信息


由于原因我不能使用resource而不是Drawable。

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

首先,尝试在没有livedata的情况下将drawable注入数据绑定中。例如:在活动/片段中,从livedata中获取可绘制的值,并将其放入数据绑定中。查看drawable是否为null。 如果drawable不为null,那么数据绑定库很有可能与bindingadapter中的drawableLeft类型发生冲突

您还可以尝试读取生成的数据绑定代码,以了解引擎盖下发生了什么以及在数据绑定中使用livedata失败的地方

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

我很想听听你的问题,知道你是如何处理这件事的