我有一个ImageView
的屏幕,其中包含实际的个人资料图片。我可以通过用相机拍照或从SD卡中挑选照片来编辑该个人资料照片。我将新选择的个人资料图片存储在与旧的相同的路径下(我覆盖它),这是我猜的逻辑。
但是,当我将新的个人资料图片设置为ImageView
时,它无法刷新。我必须重新启动应用程序以查看更改。
this.imageView.invalidate();
当我浏览谷歌时所有人都告诉我要做的事情但是没有,这是行不通的!那么我如何强制我的imageview加载新的个人资料图片?
我在Picasso的帮助下将图片加载到ImageView
:
Picasso picasso = Picasso.with(context);
if(reload) {
picasso.invalidate(new File(fileName));
}
RequestCreator requestCreator = picasso.load(new File(fileName));
requestCreator.into(imageView);
答案 0 :(得分:7)
Picasso缓存加载的图像以加快加载过程。这意味着,如果您尝试重新加载相同的图片,则会加载缓存版本,但不会从磁盘读取更改的File
。
您需要告诉Picasso图片已更改,并且需要通过使缓存无效来从磁盘重新加载图片。你这样做的方式是这样的:
File file = new File(fileName);
Picasso picasso = Picasso.with(context);
picasso.invalidate(file);
picasso.load(file).into(imageView);
答案 1 :(得分:4)
要跳过Picasso的缓存,您可以使用.memoryPolicy(MemoryPolicy.NO_CACHE)
静态方法:
Picasso
.with(context)
.load(file)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(imageView);