Вместо:
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new Guid1();
case 1:
return new Guid2();
case 2:
return new Guid3();
default :
return null;
}
}
Почему бы вам не:
List<Fragment> myFragments = new ArrayList();
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
myFragments.add(new Guid1());
myFragments.add(new Guid2());
myFragments.add(new Guid3());
}
@Override
public Fragment getItem(int position) {
if (position < myFragments.size()) {
return myFragments.get(position);
} else {
return null;
}
}
После изучения вашего кода, я предполагаю, что вы заполняете кучу экземплярами фрагментов. При таком подходе вы гарантируете, что создаете фрагменты только при создании адаптера при запуске приложения. Мы просто храним их в памяти во время работы приложения, вместо того, чтобы создавать новый каждый раз, когда вы хотите представить фрагмент.
Дайте мне знать, помогло ли это.
UPDATE:
Я обычно создаю свои фрагменты, а адаптер - с помощью addFragment ().
Вот так:
// here we set up our own adapter...
SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// ...add the fragments we want...
mSectionsPagerAdapter.addFragment(new Guid1());
mSectionsPagerAdapter.addFragment(new Guid2());
mSectionsPagerAdapter.addFragment(new Guid3());
// ...and set up our own adapter on the viewpager
mViewPager.setAdapter(mSectionsPagerAdapter);
А вот формула, которую я использую для создания своих собственных адаптеров:
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
/**Adds a fragment and corresponding title to the list*/
public void addFragment(Fragment f, String title){
mFragmentList.add(f);
mFragmentTitleList.add(title);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}