泰尔滑翔如果偏好

设置我有我的应用程序内的几个RecyclerView的,和所有的人都该有一个ImageView项目,这是与Glide进一步填充,这样不加载图片:泰尔滑翔如果偏好

Glide.with(context) 

.load(imageUrl)

.asBitmap()

.error(R.drawable.placeholder_avatar)

.centerCrop()

.into(mAvatarImageView);

在我的首选项屏幕中,用户可以禁用加载所有远程图像以节省带宽。 什么是最好的方式告诉Glide不加载图像,而不在所有RecyclerView适配器内使用经典的if-else条件,这违反了DRY原则?

我正在寻找这样的方法:

.shouldLoad(UserSettings.getInstance().isImageLoadingEnabled()); 

回答:

如果你决定使用Kotlin您可以创建所需的扩展功能:

fun <T> RequestBuilder<T>.shouldLoad(neededToLoad : Boolean) : RequestBuilder<T> { 

if(!neededToLoad) {

return this.load("") // If not needed to load - remove image source

}

return this // Continue without changes

}

然后你可以使用它如你有问题描述:

Glide.with(context) 

.load(imageUrl)

.shouldLoad(false)

.into(imageView)


这是公平地说,你可以用shouldLoad()功能只创建一个Kotlin文件和Java使用它,但代码变得丑陋:

shouldLoad(Glide.with(this) 

.load(imageUrl), false)

.into(imageView);

OR

RequestBuilder<Drawable> requestBuilder = Glide.with(this) 

.load(imageUrl);

requestBuilder = shouldLoad(requestBuilder, true);

requestBuilder.into(imageView);

回答:

假设你正在使用滑翔V4,有专门为此设计了一个请求选项:RequestOptions.onlyRetrieveFromCache(boolean flag)。启用时,只加载内存或磁盘缓存中已有的资源,有效防止来自网络的负载并节省带宽。

如果您使用Glide v4生成的API,则此选项可直接在GlideApp.with(context).asBitmap()返回的GlideRequest上使用。 否则,您必须创建一个RequestOptions使用此标志启用,apply它:

RequestOptions options = new RequestOptions().onlyRetrieveFromCache(true); 

Glide.with(context).asBitmap()

.apply(options)

.error(R.drawable.placeholder_avatar)

.centerCrop()

.into(mAvatarImageView);

以上是 泰尔滑翔如果偏好 的全部内容, 来源链接: utcz.com/qa/265160.html

回到顶部