0

My app was working with the android support library rev 12 but when I updated to revision 13, my FragmentStatePagerAdapter started driving me nuts:

My activity:

import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
...

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mAdapter = new MyAdapter(getFragmentManager());

    mPager = (ViewPager)findViewById(R.id.main_frame_pager);
    mPager.setAdapter(mAdapter);
}

public static class MyAdapter extends FragmentStatePagerAdapter {
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

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

    @Override
    public Fragment getItem(int position) {
        Log.i(TAG, "getItem() -> New fragment at position " + position);
        switch (position) {
        case 0:
            IdentityFragment idFrag = new IdentityFragment();
            return idFrag;
        case 1:
            SkillFragment skFrag = new SkillFragment();
            return skFrag;
        case 2:
            ExperiencesFragment expFrag2 = new ExperiencesFragment();
            return expFrag2;
        case 3:
            EducationFragment eduFrag = new EducationFragment();
            return eduFrag;
        case 4:
            MiscFragment mFrag = new MiscFragment();
            return mFrag;
        }
        return null;
    }
}

All my fragments are instanciated (LogCat displays "getItem() -> New fragment at position [0 -> 4]") while only 0 and 1 were expected (offscreenPageLimit = 1)

Cœur
  • 37,241
  • 25
  • 195
  • 267
Mathieu Castets
  • 5,861
  • 3
  • 28
  • 37

1 Answers1

2

Make sure your ViewPager declaration has not a layout_width="0dip". Use this instead :

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    ...

</android.support.v4.view.ViewPager>

It appeared in the 13rd revision of the support library since they're more strict about what you can do and what you cannot do with the ViewPager.

tyxie
  • 36
  • 2
  • Wow! I would have never thought about that one! Indeed I was using `layout_width="0dip"` along with `android:layout_weight="1"` Thanks a lot! – Mathieu Castets Jul 19 '13 at 08:27
  • Seems like guys at Google were aware of the issue. Bug has been fixed since revision 18 of the support library (July 2013): "Modified ViewPager to better handle cases where the pager has a measured width of zero in the initial layout processing." – Mathieu Castets Sep 05 '13 at 09:17