FragmentStatePagerAdapter在更新到ADT 22后实例化所有片段

时间:2013-07-18 14:39:26

标签: android android-fragments android-support-library fragmentstatepageradapter

我的应用程序正在使用android支持库rev 12但是当我更新到版本13时,我的FragmentStatePagerAdapter开始让我疯狂:

我的活动:

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

我的所有片段都是实例化的(LogCat显示&#34; getItem() - &gt;位置[0 - &gt; 4]&#34;)的新片段,而预期只有0和1(offscreenPageLimit = 1)< / p>

1 个答案:

答案 0 :(得分:2)

确保您的ViewPager声明没有layout_width="0dip"。请改用:

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

    ...

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

它出现在支持库的第13版中,因为他们对你可以做什么以及你不能用ViewPager做什么更加严格。