如何使用 Glide 设置个人资料图片(如果存在),否则使用占位符?
How to set a profile picture if it exists using Glide, otherwise use a placeholder?
我创建了一个致盲适配器:
@BindingAdapter("android:profileImage")
fun setProfileImage(imageView: ImageView, profileImage: String) {
Glide.with(imageView.context).load(profileImage)
.placeholder(R.drawable.placeholder)
.into(imageView)
}
而且效果很好。但是,当我从 public API 请求用户时,在某些情况下 profileImage
为空。我的目标是在 profileImage
不为空时使用 Glide,否则使用 drawable 目录中存在的占位符。这是我对我的 ImageVIew 所做的尝试:
android:profileImage="@{user.isProfilePictureNotNull() ? user.profileImage : @drawable.placeholder}"
其中 isProfilePictureNotNull()
定义为:
fun isProfilePictureNotNull() = profileImage != null
但是 Android Studio 正在满足:
'!=', '%', '*', '+', '-', '/', ':', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'.
如何解决这个问题?
这里的问题是您试图将不是字符串 (@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)
}
我创建了一个致盲适配器:
@BindingAdapter("android:profileImage")
fun setProfileImage(imageView: ImageView, profileImage: String) {
Glide.with(imageView.context).load(profileImage)
.placeholder(R.drawable.placeholder)
.into(imageView)
}
而且效果很好。但是,当我从 public API 请求用户时,在某些情况下 profileImage
为空。我的目标是在 profileImage
不为空时使用 Glide,否则使用 drawable 目录中存在的占位符。这是我对我的 ImageVIew 所做的尝试:
android:profileImage="@{user.isProfilePictureNotNull() ? user.profileImage : @drawable.placeholder}"
其中 isProfilePictureNotNull()
定义为:
fun isProfilePictureNotNull() = profileImage != null
但是 Android Studio 正在满足:
'!=', '%', '*', '+', '-', '/', ':', <, <<, <=, '==', '>', '>=', '>>', '>>>' or '[' expected, got ':'.
如何解决这个问题?
这里的问题是您试图将不是字符串 (@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)
}