簡體   English   中英

與 LiveData 的數據綁定<drawable>使 BindingAdapter 上的值無效?</drawable>

[英]Data binding with LiveData<Drawable> nullifies value on BindingAdapter?

我在使用數據綁定更新TextViewdrawableLeft時遇到問題。

我的實時數據:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM