毕加索怎么知道它在一个列表中运行?

Posted

技术标签:

【中文标题】毕加索怎么知道它在一个列表中运行?【英文标题】:How does picasso know it runs in a list? 【发布时间】:2021-12-29 11:07:22 【问题描述】:

我正在寻找Picasso 的文档,它提到:

Features
ADAPTER DOWNLOADS
Adapter re-use is automatically detected and the previous download canceled.

@Override public void getView(int position, View convertView, ViewGroup parent) 
  SquaredImageView view = (SquaredImageView) convertView;
  if (view == null) 
    view = new SquaredImageView(context);
  
  String url = getItem(position);

  Picasso.get().load(url).into(view);

但从他们提供的示例中,我不明白毕加索如何理解它正在将图像加载到适配器中,或者可以取消之前的下载。

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

它没有。它跟踪当前下载的所有图像,如果再次请求相同的 URI,它将不会启动新的下载请求(它表示旧的将被取消,更准确地说旧的下载将继续,但旧下载不会发生,将被新下载取代)。所以它不知道它在列表中,但这种行为是列表想要的。

它也知道它被下载到哪个视图,所以它也可能使用它。如果同一个视图被多次加载,实际上只有最后一个会被执行。

【讨论】:

如果URI相同,表示同一张图片?但在一个列表中,我们有多个不同的图像。 是的,相同的 URI 表示相同的图像。在列表中,您将拥有不同的图像,但每个不同的图像都有自己的 URI。 那么文档说的是,如果一个列表有多个相同的图像,那么旧的回调不会被调用,这意味着我们已经从之前的请求中滚动出来了吗?对吗?

以上是关于毕加索怎么知道它在一个列表中运行?的主要内容,如果未能解决你的问题,请参考以下文章

毕加索没有在我的 ImageView 中显示图片我该怎么办?

毕加索:将图像加载到小部件列表视图

如何使用毕加索图书馆

毕加索可以为我排队吗?

enumerate给列表加索引

11 怎么给字符串加索引