将相同的图库图像加载到两个不同的活动片段中 Android Picasso

Posted

技术标签:

【中文标题】将相同的图库图像加载到两个不同的活动片段中 Android Picasso【英文标题】:Loading Same Gallery Image Into Two Different Activity Fragments Android Picasso 【发布时间】:2015-05-02 06:55:55 【问题描述】:

目前我有一个主 Activity,其中有一个使用 RecyclerView 加载的片段。在 RecyclerView 适配器中,我使用 Picasso 根据存储的 URI 字符串从用户画廊加载图像,如下所示:

Picasso.with(context)
    .load(imageUri)
    .resize(400, 400)
    .into(viewHolder.imageView);

当用户单击 RecyclerView 中的这些项目之一时,我会转到一个新的 Activity 并在它自己的 Fragment onCreateView 中再次加载相同的图像,但它的尺寸会稍大一些(因为我正在将其加载到的 ImageView 更大大小)

Picasso.with(getActivity())
    .load(imageUri)
    .resize(600, 600)
    .centerCrop()
    .into(imageView);

我的问题是……假设这些图片可能很大……

有没有更好的方法在 RecyclerView 第一次需要它们时在此图像中加载一次,例如 600px X 600px,然后在后续需要它的活动和片段中重用位图数据而无需再次重新加载?

如果这样更好的话,我愿意使用不同的图像加载器,比如 Volley。

任何帮助将不胜感激。

马可

【问题讨论】:

【参考方案1】:

你可以试试Glide 它有几乎相同的api。而不是 Picasso glide 有自己的缓存实现,当 Picasso 只使用 http 缓存并且很难控制时。在 glide 中,您需要指定 diskCacheStrategy.ALL 以使 glide 缓存您想要的一切。这里是cache wiki

【讨论】:

谢谢索尼。我会看看 Glide 是否适合我的需求。 它不能解决在新上下文中再次加载图像的问题。 @SouravChandra 不可能是真的,非常适合我,看起来你做错了什么。你能提供一个你的代码示例吗? 我尝试使用 Glide,因为它有很多很好的参考,但是图像没有在某些设备中加载,例如在 Samsumg Galaxy Nexus s7 Edge 上,图像仍然是“空白”:github.com/bumptech/glide/issues/738github.com/bumptech/glide/issues/130github.com/bumptech/glide/issues/911 @RichardSilveira 所有图书馆都有错误,如果你能重现它 - 渴望修复它并发送 PR;)

以上是关于将相同的图库图像加载到两个不同的活动片段中 Android Picasso的主要内容,如果未能解决你的问题,请参考以下文章

使用片段从图库中选择图像

用于在多个活动/片段中重用的全局加载器 (LoaderManager)

Kotlin 相同片段多个活动

将图像保存到图库

根据父活动在片段中调用不同的方法

在一个活动中加载单个片段两次,从本地json文件中加载2个问题