I have ViewPager with FragmentPagerAdapter to display images from different folders (inside every Fragment item). And i faced with a strange behavior of FragmenPagerAdapter. For the first time, when i create it everything is ok, and i can see pictures. But when i create it for the second time i have only black screens without images and i need to scroll ViewPager 4 times to see them and i also see that some Fragments with images from previous folder are present with images from current folder. My be this is because this Fragments are cached? I tried to use FragmentStatePagerAdapter but i have no success. Thank you for help! Here is code of my FragmentPagerAdatpter.
public class MyPagerAdapter extends FragmentPagerAdapter implements
ViewPager.OnPageChangeListener {
private MyLinearLayout cur = null;
private MyLinearLayout next = null;
private MainActivity context;
private FragmentManager fm;
private FragmentImageList il;
private float scale;
private int size;
private ArrayList<Image> images;
public MyPagerAdapter(MainActivity context, FragmentManager fm, FragmentImageList il, ArrayList<Image> images) {
super(fm);
this.fm = fm;
this.context = context;
this.il = il;
this.images = images;
size = images.size();
}
@Override
public Fragment getItem(int position)
{
// make the first pager bigger than others
if (position == FragmentImageList.FIRST_PAGE)
scale = FragmentImageList.BIG_SCALE;
else
scale = FragmentImageList.SMALL_SCALE;
//position = position % FragmentImageList.PAGES;
position = position % size;
return FragmentImageItem.newInstance(context, position, scale, images.get(position));
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
container.removeView(((FragmentImageItem)object).getView());
}
@Override
public int getCount() {
//return FragmentImageList.PAGES * FragmentImageList.LOOPS;
return size * FragmentImageList.LOOPS;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (positionOffset >= 0f && positionOffset <= 1f){
cur = getRootView(position);
next = getRootView(position +1);
cur.setScaleBoth(FragmentImageList.BIG_SCALE
- FragmentImageList.DIFF_SCALE * positionOffset);
next.setScaleBoth(FragmentImageList.SMALL_SCALE
+ FragmentImageList.DIFF_SCALE * positionOffset);
}
}
@Override
public void onPageSelected(int position) {}
@Override
public void onPageScrollStateChanged(int state) {}
private MyLinearLayout getRootView(int position){
return (MyLinearLayout)
fm.findFragmentByTag(this.getFragmentTag(position))
.getView().findViewById(R.id.root);
}
private String getFragmentTag(int position) {
return "android:switcher:" + il.pager.getId() + ":" + position;
}
}