我有一个名为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()而不是里面的代码
答案 0 :(得分:2)
在您的情况下,您应该使用FragmentPagerAdapter,因为当您使用FragmentStatePagerAdapter时,页面可能会被销毁,因此您需要在getItem()中重新创建它们。
当存在大量页面时,此版本的寻呼机更有用,更像列表视图。当用户看不到页面时,它们的整个片段可能会被破坏,只保留该片段的保存状态。