2016-01-03 1 views
0

У меня странное поведение с использованием Picasso. У меня есть три экрана. Экран A имеет вид ресайклера, когда пользователь нажимает на один элемент, на экране B открывается более подробная информация о клике. На экране B a есть три эскиза изображения , и когда пользователь щелкает в любом из этих миниатюр (которые я загрузил пикассо), я начинаю фоновый поток, чтобы записать эти растровые изображения в файлы и передать пути к файлам для экрана C. Экран C имеет просмотр пейджера для отображения изображений. Итак, я снова загружаю изображения с помощью picasso, используя теперь путь к файлу.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; 
} 

Проблема заключается в том, когда пользователь выбирает элемент с экрана, перейдите к экрану B и коснитесь ImageView, чтобы открыть экран 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); 
    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) { 

    } 
} 

Я знаю, что это не проблема с моей функцией, чтобы сохранить растровое изображение в файл, потому что если я не использую 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))); 
    ((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)); 
    } 
} 

С этим Пикассо удалить три файла из кэша и показывает правильно в следующий раз.