【问题标题】:FragmentStatePagerAdapter instantiates all fragments after updating to ADT 22FragmentStatePagerAdapter 更新到 ADT 22 后实例化所有片段
【发布时间】:2013-07-18 14:39:26
【问题描述】:

我的应用正在使用 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 显示“getItem() -> 位置 [0 -> 4] 处的新片段”),而预期只有 0 和 1(offscreenPageLimit = 1)

【问题讨论】:

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


    【解决方案1】:

    确保您的 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 可以做什么和不能做什么更加严格。

    【讨论】:

    • 哇!我从来没有想过那个!事实上,我正在使用 layout_width="0dip"android:layout_weight="1" 非常感谢!
    • Google 的员工似乎意识到了这个问题。自支持库的第 18 版(2013 年 7 月)以来,该错误已得到修复:“修改了 ViewPager 以更好地处理寻呼机在初始布局处理中测量宽度为零的情况。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2014-04-08
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多