0

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;
}

}

bukka.wh
  • 913
  • 2
  • 16
  • 29

0 Answers0