毕加索加载错误的图像

时间:2016-01-03 21:51:59

标签: android picasso

我使用毕加索有一种奇怪的行为。 我有三个屏幕。屏幕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;
} 

所以,如果有人能帮助我并说出我做错了什么,我很感激。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

我在保存viewPager的片段中执行此操作:

@Override
public void onDestroy() {
    super.onDestroy();
    for (String path : filePaths) {
        Picasso.with(getContext()).invalidate(new File(path));
    }
}

使用此毕加索从缓存中删除三个文件并在下次显示正确。