FragmentStatePagerAdapter返回错误的位置,但右侧片段

时间:2016-09-10 13:19:41

标签: android android-fragments android-viewpager

我有一个名为MainActivity的Activity,它有一个ViewPager和一个TabLayout。 ViewPager有4(4)个片段绑定在那里。我有一个问题(可能)FragmentStatePagerAdapter

我运行了代码

public class MainPagerAdapter extends FragmentStatePagerAdapter {

    Fragment[] fragments;

    public MainPagerAdapter(FragmentManager fm) {
        super(fm);
        fragments = new Fragment[]{
                new FragProfile(),
                new FragScore(),
                new FragMoney(),
                new FragOther()
        };
    }

    @Override
    public Fragment getItem(int p) {
        Log.w("Fragment", String.valueOf(p));

        switch (p){
            case 0:
                return fragments[0];
            case 1:
                return fragments[1];
            case 2:
                return fragments[2];
            case 3:
                return fragments[3];
            default:
                return null;
        }
    }

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

在第一个标签上,我得到了这个日志

09-10 20:05:29.683 17034-17034/ampersanda.elsys W/Fragment: 0
09-10 20:05:29.684 17034-17034/ampersanda.elsys W/Fragment: 1

第二次

09-10 20:11:03.970 17034-17034/ampersanda.elsys W/Fragment: 2

第三次

09-10 20:11:54.534 17034-17034/ampersanda.elsys W/Fragment: 3

但是第四次我没有记录任何东西,我回到第三个我得到了这个

09-10 20:14:07.373 17034-17034/ampersanda.elsys W/Fragment: 1

回到第二个

09-10 20:14:50.241 17034-17034/ampersanda.elsys W/Fragment: 0

我回到第一个,我什么都没记录了

我的代码运行不正常,但我得到的碎片显示就像它的switch()而不是里面的代码

1 个答案:

答案 0 :(得分:2)

在您的情况下,您应该使用FragmentPagerAdapter,因为当您使用FragmentStatePagerAdapter时,页面可能会被销毁,因此您需要在getItem()中重新创建它们。

  

当存在大量页面时,此版本的寻呼机更有用,更像列表视图。当用户看不到页面时,它们的整个片段可能会被破坏,只保留该片段的保存状态。