package com.github.paolorotolo.appintro; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.view.ViewGroup; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; public class PagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragments; private Map<Integer, Fragment> retainedFragments; public PagerAdapter(FragmentManager fm, @NonNull List<Fragment> fragments) { super(fm); this.fragments = fragments; this.retainedFragments = new HashMap<>(); } @Override public Fragment getItem(int position) { // Check if the fragment at this position has been retained by the PagerAdapter if (retainedFragments.containsKey(position)) { return retainedFragments.get(position); } return fragments.get(position); } @Override public int getCount() { return this.fragments.size(); } @NonNull public List<Fragment> getFragments() { return fragments; } @NonNull public Collection<Fragment> getRetainedFragments() { return retainedFragments.values(); } @Override public Object instantiateItem(ViewGroup container, int position) { Fragment fragment = (Fragment) super.instantiateItem(container, position); retainedFragments.put(position, fragment); return fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { if (retainedFragments.containsKey(position)) { retainedFragments.remove(position); } super.destroyItem(container, position, object); } }