我使用毕加索有一种奇怪的行为。 我有三个屏幕。屏幕A具有回收者视图,当用户单击一个项目时,屏幕B将打开,其中包含有关所单击项目的更多详细信息。 在屏幕B a中具有三个图像缩略图 当用户点击任何缩略图(我用毕加索加载)时,我启动一个后台线程将这些位图写入文件并传递文件路径 对于屏幕C.屏幕C具有用于显示图像的视图寻呼机。所以,我加载了 现在使用picasso再次使用文件路径。
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = LayoutInflater.from(this.context).inflate(R.layout.item_fullscreen_image,
container, false);
ImageView img = (ImageView) view.findViewById(R.id.img);
//img.setImageURI(Uri.parse(filePaths.get(position)));
Picasso.with(context).load(new File(filePaths.get(position))).into(img);
((ViewGroup) container).addView(photoView);
return view;
}
问题是,当用户从屏幕A中选择一个项目时,转到屏幕B并点击一个 用view viewr打开屏幕C的imageview,如果是第一次,工作正常。
如果不是第一次,使用毕加索从文件加载的图像不会改变, 它总是加载相同的三个图像以填充视图寻呼机。
我已经尝试使用Target加载,但问题仍然存在:
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = LayoutInflater.from(this.context).inflate(R.layout.item_fullscreen_image,
container, false);
ImageView img = (ImageView) view.findViewById(R.id.img);
Target target = new TargetBitmaps(img);
img.setTag(target);
Picasso.with(context).load(new File(filePaths.get(position))).into(target);
((ViewGroup) container).addView(photoView);
return view;
}
private class TargetBitmaps implements Target {
private ImageView img;
public TargetBitmaps(ImageView img) {
this.img = img;
}
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
img.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
我知道我的函数将位图保存到文件没有问题,因为如果 我不使用毕加索,并以这种方式做,工作正常:
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = LayoutInflater.from(this.context).inflate(R.layout.item_fullscreen_image,
container, false);
ImageView img = (ImageView) view.findViewById(R.id.img);
img.setImageURI(Uri.parse(filePaths.get(position)));
((ViewGroup) container).addView(photoView);
return view;
}
所以,如果有人能帮助我并说出我做错了什么,我很感激。
答案 0 :(得分:0)
我找到了解决方案:
我在保存viewPager的片段中执行此操作:
@Override
public void onDestroy() {
super.onDestroy();
for (String path : filePaths) {
Picasso.with(getContext()).invalidate(new File(path));
}
}
使用此毕加索从缓存中删除三个文件并在下次显示正确。