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
,其中包含随机加载图像的项目。除此之外,用户会抱怨图像仍在加载,尽管缓存中加载了一些图像。