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”的名称可能会导致错误,因为它是在数据绑定库之外的框架中使用的字符串 我很想听听你的问题,知道你是如何处理这件事的