【发布时间】:2016-04-07 12:39:11
【问题描述】:
我在使用毕加索时有一个奇怪的行为。 我有三个屏幕。屏幕 A 有一个回收器视图,当用户单击一个项目时,屏幕 B 将打开有关所单击项目的更多详细信息。 在屏幕 B a 中有三个图像缩略图 当用户单击任何这些缩略图(我用毕加索加载的)时,我启动一个后台线程将这些位图写入文件并传递文件路径 用于屏幕 C。屏幕 C 具有用于显示图像的视图寻呼机。所以,我加载 用毕加索再次使用现在的图像,文件路径。
@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 并点击一个 imageview 用视图寻呼机打开屏幕 C,如果是第一次,工作正常。
如果不是第一次,用毕加索从文件加载的图像不会改变, 它总是加载相同的三个图像以填充视图寻呼机。
我已经尝试使用 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;
}
所以,如果有人可以帮助我并指出我做错了什么,我将不胜感激。
【问题讨论】: