Я использую Picasso в качестве моей библиотеки загрузчика изображений. У меня есть ViewPager, который показывает некоторые фрагменты с ImageViews. Изображения, которые должны отображаться в представлении изображения, должны извлекаться из сети. Моя проблема заключается в том, что в ViewPager мне нужно показать только изображения (фрагменты), которые были извлечены успешно. Является ли это возможным?Picasso загрузчик изображений в ViewPager: Добавить фрагменты на основе first come first serve
0
A
ответ
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) {
}
}
}