ViewPager obsługujący stare fragmenty podczas obracania ekranu

ja używamViewPager iFragmentStatePagerAdapter pokazać fragment. Początkowo dodaje się 2 fragmenty Fragment1, a Fragment2 i trzeci fragment Fragment3 dodaje się na 2 pozycji po otrzymaniu odpowiedzi z serwera. Po dodaniu wszystkich stron powinna to być sekwencja fragmentów w ViewPager -> Fragment1, Fragment3, Fragment2.

Problem pojawia się po dodaniu Fragmentu 1 i Fragmentu 3, a aplikacja wykonuje wywołanie serwera przed dodaniem 3. Fragmentu na 2. pozycji, jeśli wykonuję obrót ekranu wielokrotnie, a po dodaniu trzeciego fragmentu nadal pokazuje starą kopię Fragmentu 2, który początkowo był na 2. pozycji na 2. pozycja i 3 pozycja mają nową kopię Fragmentu2. Tak więc Fragment3 doest pojawia się w ViewPager. Sekwencja po dodaniu 3. Fragmentu -> Fragment1, stara kopia Fragmentu2, Nowy Fragment2.

Jestem nadrzędnyonSaveInstanceState i wołaniesuper.onSaveInstanceState w mojej działalności.

Próbowałem też wrócićPOSITION_NONE zgetItemPosition. Czytałem gdzieś, że ViewPager zapisuje kopie fragmentu. Również poprzez debugowanie sprawdziłem, że ViewPager zawiera 2 kopie Fragmentu2, gdy problem został odtworzonygetItem zFragmentStatePagerAdapter zwrócił różne fragmenty dla każdej pozycji, ale wciąż na 2. pozycji pokazywał stary fragment. Do celów testowych wgetItem Wróciłem Fragment1 dla wszystkich pozycji, tak aby wszystkie 3 strony były takie same, ale nawet po tym na drugiej pozycji pokazywał starą kopię Fragmentu 2, gdy odtwarzałem problem z krokami wymienionymi powyżej.

Więc jak to zrobićViewPager tak, aby nie zapisywał starych fragmentów. Jak odświeżyć ViewPager, aby nie zachowywał starej kopii z fragmentami. Myślę, że problem jest z onSaveInstanceState, ale potrzebuję go. Jak mogę wykluczyćViewPager kiedy widoki są zapisywaneonSaveInstanceState. próbowałemmViewPager.setSaveEnabled(false) ale zajmuje zbyt dużo pamięci.

Odkryłem, że problem jestinstantiateItem metoda adaptera nie wywołuje getItem, ponieważ zwracany jest stary fragment.

Poniżej znajduje się kod rozwiązania

Kod:

 @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Object obj = super.instantiateItem(container, position);
            Fragment fragment = mFragments.get(position);

            if((obj!=null && fragment!=null) && !(obj.getClass().getSimpleName().equals(fragment.clss.getSimpleName()))){
                destroyItem(container, position, obj);
                return super.instantiateItem(container, position);
            }else{
                return obj;
            }
        }

questionAnswers(2)

yourAnswerToTheQuestion