我創建了一個致盲配接器:
@BindingAdapter("android:profileImage")
fun setProfileImage(imageView: ImageView, profileImage: String) {
Glide.with(imageView.context).load(profileImage)
.placeholder(R.drawable.placeholder)
.into(imageView)
}
它炒得很好。但是,當我從公共 API 請求用戶時,在某些情況下它profileImage為空。我的目標是在profileImage不為空時使用 Glide,否則使用可繪制目錄中存在的占位符。這就是我對 ImageVIew 的嘗試:
android:profileImage="@{user.isProfilePictureNotNull() ? user.profileImage : @drawable.placeholder}"
其中isProfilePictureNotNull()定義為:
fun isProfilePictureNotNull() = profileImage != null
但 Android Studio 抱怨:
'!=', '%', '*', ' ', '-', '/', ':', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'.
如何解決這個問題?
uj5u.com熱心網友回復:
這里的問題是您試圖將不是 String ( @drawable.placeholder) 的內容傳遞給系結配接器。如果將其替換為字串,您將看到錯誤已解決。
我的建議是不要在系結配接器之外做邏輯,為什么不在里面做呢?像這樣的東西:
@BindingAdapter("android:profileImage")
fun setProfileImage(imageView: ImageView, profileImage: String?) {
if (profileImage != null) {
Glide.with(imageView.context).load(profileImage)
.placeholder(R.drawable.placeholder)
.into(imageView)
} else {
imageView.setImageDrawable(R.drawable.placeholder)
}
}
現在,您的 XML 宣告可以簡單地是:
android:profileImage="@{user.profileImage}"
此外,Glide 有一個.error()呼叫,您可以將其發送給構建器。我不確定它是否適用于 null 或觸發它的原因,但你可以試一試。它看起來像這樣,然后:
@BindingAdapter("android:profileImage")
fun setProfileImage(imageView: ImageView, profileImage: String?) {
Glide.with(imageView.context).load(profileImage)
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(imageView)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460517.html
