2015-12-09 1 views
0

Я использую Picasso в качестве моей библиотеки загрузчика изображений. У меня есть ViewPager, который показывает некоторые фрагменты с ImageViews. Изображения, которые должны отображаться в представлении изображения, должны извлекаться из сети. Моя проблема заключается в том, что в ViewPager мне нужно показать только изображения (фрагменты), которые были извлечены успешно. Является ли это возможным?Picasso загрузчик изображений в ViewPager: Добавить фрагменты на основе first come first serve

ответ

0

Я нашел его сам. Я размещаю здесь, потому что это может помочь кому-то, кто сталкивается с подобным сценарием.

Мой ViewPagerAdapter приводится ниже:

import android.content.Context; 
    import android.graphics.Bitmap; 
    import android.graphics.drawable.Drawable; 
    import android.support.v4.app.Fragment; 
    import android.support.v4.app.FragmentManager; 
    import android.support.v4.app.FragmentStatePagerAdapter; 

    import com.squareup.picasso.Picasso; 
    import com.squareup.picasso.Target; 

    import java.util.ArrayList; 
    import java.util.List; 

    //ImageFragment is a normal fragment containing a ImageView 
    import *****.ImageFragment; 

/** 
* Created by sanifss on 07/12/15. 
*/ 
public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    private final String[] urls; 
    private final Context context; 
    private List<String> urlList; 
    private final boolean zoomEnabled; 
    private List<MyTarget> targets; 

    public ScreenSlidePagerAdapter(Context context, FragmentManager fm, String[] urls, boolean zoomEnabled) { 
     super(fm); 
     this.urls = urls; 
     this.context = context; 
     this.zoomEnabled = zoomEnabled; 
     urlList = new ArrayList<>(); 

     targets = new ArrayList<>(); 
     fetchImages();//images are first loaded and then added to the adapter in FCFS. 
    } 

    private void fetchImages() { 
     for (String url : urls) { 
      MyTarget target = new MyTarget(url); 
      targets.add(target);//needed otherwise target object will get garbage collected 
      Picasso.with(context).load(url).into(target); 
     } 
    } 

    @Override 
    public Fragment getItem(int position) { 
     //ImageFragment is a normal fragment containing a ImageView 
     return ImageFragment.newInstance(urlList.get(position), zoomEnabled); 
    } 

    @Override 
    public int getCount() { 
     return urlList.size(); 

    } 

    class MyTarget implements Target { 

     private String url; 

     public MyTarget(String url) { 
      this.url = url; 
     } 

     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      ScreenSlidePagerAdapter.this.urlList.add(url); 
      ScreenSlidePagerAdapter.this.notifyDataSetChanged(); 
     } 

     @Override 
     public void onBitmapFailed(Drawable errorDrawable) { 
     } 

     @Override 
     public void onPrepareLoad(Drawable placeHolderDrawable) { 
     } 
    } 

}