【问题标题】:How to refresh the content of an ImageView如何刷新 ImageView 的内容
【发布时间】:2015-05-01 23:07:57
【问题描述】:

我有一个带有ImageView 的屏幕,其中包含实际的个人资料图片。我可以通过用相机拍照或从 SD 卡中挑选照片来编辑该个人资料照片。我将新选择的个人资料图片存储在与旧的(我覆盖它)相同的路径下,我猜这是合乎逻辑的。

但是,当我将新的个人资料图片设置为我的 ImageView 时,它不会刷新。我必须重新启动应用才能看到更改。

this.imageView.invalidate();

当我浏览谷歌时,所有人都告诉我要这样做,但不,这不起作用!那么如何强制我的 imageview 加载新的个人资料图片?

我在毕加索的帮助下将图像加载到ImageView

Picasso picasso = Picasso.with(context);

if(reload) {
    picasso.invalidate(new File(fileName));
}

RequestCreator requestCreator = picasso.load(new File(fileName));
requestCreator.into(imageView);

【问题讨论】:

  • 只需再次加载位图并将其设置为ImageView。没有其他方法可以刷新ImageView
  • 这就是我在毕加索的帮助下所做的。
  • 你应该从一开始就提到你正在使用毕加索。毕加索缓存图像。那么最有可能发生的是毕加索从缓存中加载旧图片而不是从磁盘中加载新图片。您需要像这样使缓存无效:Picasso.with(getActivity()).invalidate(file);
  • 这也不是重新加载imageview的新内容
  • 它适用于我,请参阅我的答案。放弃那个if(reload) { ... },你不需要那个。

标签: android


【解决方案1】:

毕加索缓存加载的图像以加快加载过程。这意味着如果您尝试重新加载完全相同的图片,它会加载缓存版本,并且不会从磁盘读取更改后的File

您需要告诉 Picasso 图片已更改,并且需要通过使缓存无效来从磁盘重新加载图片。你这样做的方式是这样的:

File file = new File(fileName);
Picasso picasso = Picasso.with(context);
picasso.invalidate(file);
picasso.load(file).into(imageView);

【讨论】:

    【解决方案2】:

    要跳过毕加索的缓存,可以使用.memoryPolicy(MemoryPolicy.NO_CACHE)静态方法:

    Picasso
        .with(context)
        .load(file)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .into(imageView);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2016-02-21
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多