public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<SectionType> sections;
private SparseArray<Fragment> fragmentMap;
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
fragmentMap = new SparseArray<Fragment>();
...
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment instantiateItem =
(Fragment) super.instantiateItem(container, position);
fragmentMap.put(position, instantiateItem);
...
return instantiateItem;
}
private Fragment getNewFragmentByPosition(int i) {
// Create your fragment
}
@Override
public Fragment getItem(int i) {
Fragment fragment = fragmentMap.get(i);
if (fragment == null) {
fragment = getNewFragmentByPosition(i);
}
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
super.destroyItem(container, position, object);
fragmentMap.remove(position);
}
...
}
Note that we save the fragment in the map in "instantiateItem" rather than in "getItem". This is intentional since if the activity is killed by Android and later recreated then "getItem" won't be called when the fragments are recreated, but "instantiateItem" will.
No hay comentarios:
Publicar un comentario