2016-01-03 170 views
0

我有使用毕加索怪异的行为。 我有三个屏幕。屏幕A具有回收器视图,当用户单击一个项目时,屏幕B将打开并提供有关所单击项目的更多详细信息。 在屏幕B上有三个图像的缩略图 并且当任何这些缩略图的(即我装载有毕加索)用户点击我开始后台线程写入这些位图的文件,并通过对屏幕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; 
} 

的问题是,当用户选择一个画面一个项目,去屏幕B和轻按 imageview的打开与查看寻呼机屏幕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); 
    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

我找到了解决办法:

我这样做是持有该viewPager片段:

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

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