Rana Ranvijay Singh
Rana Ranvijay Singh

Reputation: 6155

android - FragmentStatePagerAdapter fragment not visible

I have implemented view pager using the FragmentStatePagerAdapter. I have used 3 fragments in the view. The view pager is showing all 3 tabs with views as it should be , now my issue is that the third fragment is not visible but i am able to scroll till third tab and when i scroll back i see the second fragment but again the first fragment vanishes and all i am left is with second fragment.

mPager = (ViewPager)mContext.findViewById(R.id.viewPager);
mPager.setOnPageChangeListener(this);
mPagerAdapter = new MyPagerAdapter(mContext.getSupportFragmentManager(),mContext);
mPager.setAdapter(mPagerAdapter);

adapter code is

public class MyPagerAdapter extends FragmentStatePagerAdapter {

    private int NUM_PAGES = 3;
    List<Fragment> listFragment = new ArrayList<Fragment>();
    private MyActivity mContext;

    public MyPagerAdapter(FragmentManager fragmentManager, MyActivity mActivity) {
        super(fragmentManager);
        this.mContext = mActivity;
        listFragment.add(new FirstFragment());
        listFragment.add(new SecondFragment());
        listFragment.add(new ThirdFragment());
    }

    @Override
    public int getItemPosition(Object object){
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public Fragment getItem(int position) {
        Log.v("fragment position",""+position);
        return listFragment.get(position);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}

I am stuck in this for a while, i would really appreciate some help.Thank you.

Upvotes: 3

Views: 1318

Answers (1)

Jakub Szczygieł
Jakub Szczygieł

Reputation: 1222

It is advised to use FragmentPagerAdapter instead of FragmentStatePagerAdapter, because of very nature of those two. FragmentStatePagerAdapter is being that is able to scroll through infinite views. In case of fixed amount of them, like your case you should use FragmentPagerAdapter.

If you happen to have context issues later override following method:

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        mFragments.remove(position);
        mFragments.add(position, fragment);
        return fragment;
    }

Where mFragments is your list.

Upvotes: 1

Related Questions