如果在首选项中设置,请告诉Glide不要加载图像

我有几个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您可以创建所需的扩展function:

 fun  RequestBuilder.shouldLoad(neededToLoad : Boolean) : RequestBuilder { 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); 

要么

 RequestBuilder requestBuilder = Glide.with(this) .load(imageUrl); requestBuilder = shouldLoad(requestBuilder, true); requestBuilder.into(imageView); 

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

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

 RequestOptions options = new RequestOptions().onlyRetrieveFromCache(true); Glide.with(context).asBitmap() .apply(options) .error(R.drawable.placeholder_avatar) .centerCrop() .into(mAvatarImageView);