[英]Data Binding: Pass LiveData as is to BindingAdapter and observe it using a LifecycleOwner
[英]Data binding with LiveData<Drawable> nullifies value on BindingAdapter?
我在使用數據綁定更新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 布局:
<TextView
...removed all other params for simplicity
drawableLeft="@{viewModel.iconLiveData}"/>
改變drawable的代碼:
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
時,它是 null。 看起來Drawable
不能通過LiveData
傳遞,但我找不到任何確認。
由於某些原因,我不能使用資源而不是 Drawable。
回到我在數據綁定中實現 livedata 的時候,我發現有很多類型問題,這會觸發具有 null 值的綁定適配器。
首先,嘗試在沒有 livedata 的情況下在數據綁定中注入可繪制對象。 例如:在您的活動/片段中,從您的 livedata 中獲取可繪制值並將其放入您的數據綁定中。 查看drawable是否為null。 如果drawable不是null,那么數據綁定庫很可能與bindingadapter中的drawableLeft類型混淆。
您還可以嘗試閱讀生成的數據綁定代碼,以了解幕后發生的事情以及在數據綁定中使用 livedata 失敗的地方。
數據綁定屬性“drawableLeft”的名稱可能會導致錯誤,因為它是框架中使用的數據綁定庫之外的字符串。
我很想聽聽您的問題的回復,以了解您是如何解決這個問題的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.