如果在首选项中设置,请告诉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()
。 否则,您必须创建一个启用此标志的RequestOptions
并apply
它:
RequestOptions options = new RequestOptions().onlyRetrieveFromCache(true); Glide.with(context).asBitmap() .apply(options) .error(R.drawable.placeholder_avatar) .centerCrop() .into(mAvatarImageView);