【问题标题】:Picasso loads wrong images毕加索加载错误的图像
【发布时间】: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;
} 

所以,如果有人可以帮助我并指出我做错了什么,我将不胜感激。

【问题讨论】:

    标签: android picasso


    【解决方案1】:

    我找到了解决办法:

    我在包含 viewPager 的片段中执行此操作:

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-12
      • 1970-01-01
      • 2014-08-29
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多