Android 告诉Glide如果在“首选项”中设置,则不要加载图像
我的应用程序中有几个Android 告诉Glide如果在“首选项”中设置,则不要加载图像,android,android-glide,Android,Android Glide,我的应用程序中有几个RecyclerView,它们都有一个ImageView,并进一步填充了Glide,如下所示: Glide.with(context) .load(imageUrl) .asBitmap() .error(R.drawable.placeholder_avatar) .centerCrop() .into(mAvatarImageView); .shouldLoad(UserSettings.getInstance().isImageLoadingEnabled(
RecyclerView
,它们都有一个ImageView
,并进一步填充了Glide
,如下所示:
Glide.with(context)
.load(imageUrl)
.asBitmap()
.error(R.drawable.placeholder_avatar)
.centerCrop()
.into(mAvatarImageView);
.shouldLoad(UserSettings.getInstance().isImageLoadingEnabled());
在我的首选项屏幕中,用户可以禁用加载所有远程图像以节省带宽。
如果不在所有RecyclerView
适配器中使用经典的if-else条件,告诉Glide不要加载图像的最佳方法是什么,这违反了干燥原则
我正在寻找这样一种方法:
Glide.with(context)
.load(imageUrl)
.asBitmap()
.error(R.drawable.placeholder_avatar)
.centerCrop()
.into(mAvatarImageView);
.shouldLoad(UserSettings.getInstance().isImageLoadingEnabled());
假设您使用的是Glide v4,则有一个专门为此目的而设计的请求选项:
RequestOptions.onlyRetrieveFromCache(布尔标志)
。启用时,仅加载内存或磁盘缓存中已存在的资源,从而有效防止网络负载并节省带宽
如果使用Glide v4生成的API,此选项可直接在GlideApp.with(context).asBitmap()返回的GlideRequest
上使用。
否则,您必须创建一个启用此标志的RequestOptions
,并应用它:
RequestOptions options = new RequestOptions().onlyRetrieveFromCache(true);
Glide.with(context).asBitmap()
.apply(options)
.error(R.drawable.placeholder_avatar)
.centerCrop()
.into(mAvatarImageView);
如果您决定使用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
}
公平地说,您只能使用shoulload()
函数创建一个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上的经验,他们没有不加载的选项,因为这没有意义。您可以使用希望使用的首选项来生成经典的if-else语句:if(UserSettings.getInstance().isImageLoadingEnabled()){}此问题只有可靠的来源。如果用户希望启用远程图像提取,该怎么办?如果你能通过,他还得提出一个条件!UserSettings.getInstance().isImageLoadingEnabled()
到onlyRetrieveFromCache
而不是我的示例中的true
。通过这种方式,用户可以启用/禁用从首选项屏幕抓取远程图像。我偶然发现了这一点,但UI不适合它。想象一个RecyclerView
,其中包含随机加载图像的项目。除此之外,用户会抱怨图像仍在加载,尽管缓存中加载了一些图像。