Одной из проблем здесь является слегка запутанный API.
В FragmentPagerAdapter
, getItem(int position)
фактически означает «создать элемент».Другими словами, вы не должны пытаться вручную кэшировать фрагменты в списке в вашем адаптере.
@Override
public Fragment getItem(int position) {
return listOfFragments.get(position); //No! don't do this
}
Даже если это может показаться нелогичным, вы должны создать новый экземпляр фрагмента, который вам нужен, внутри getItem
, придерживаясь очень близко к официальному примеру Google:
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return FirstFragment.getInstance();
case 1:
return SecondFragment.getInstance();
}
}
В противном случае вы столкнетесь с проблемами, когда кэш FragmentManager и ваш собственный кэш List<Fragment>
не синхронизированы.Короче говоря, кэширование фрагментов обрабатывается FragmentManager, и вам не нужно выполнять кэширование самостоятельно.