ViewPager восстанавливает старые фрагменты при повороте экрана

я используюViewPager а такжеFragmentStatePagerAdapter показать фрагмент. Первоначально добавлено 2 фрагмента Fragment1 и Fragment2, а третий фрагмент Fragment3 добавлен на 2-й позиции после получения ответа от сервера. Поэтому после добавления всех страниц это должна быть последовательность фрагментов в ViewPager -> Фрагмент1, Фрагмент3, Фрагмент2.

Проблема в том, что после добавления Fragment1 и Fragment3 приложение выполняет серверный вызов перед добавлением 3-го фрагмента во 2-ю позицию, если я делаю поворот экрана несколько раз, то после добавления 3-го фрагмента он все еще показывает старую копию Fragment2, которая изначально была на 2-й позиции во 2-й позиции. позиция и третья позиция имеют новую копию Fragment2. Итак, фрагмент Fraest3 появляется в ViewPager. Последовательность после добавления 3-го фрагмента -> Фрагмент1, старая копия Фрагмента2, Новый фрагмент2.

Я переопределяюonSaveInstanceState и звонитsuper.onSaveInstanceState в моей деятельности.

Также я попытался вернутьсяPOSITION_NONE отgetItemPosition, Я где-то читал, что ViewPager сохраняет копии фрагмента. Также с помощью отладки я проверил, что ViewPager содержал 2 копии Fragment2, когда проблема воспроизводилась, хотяgetItem изFragmentStatePagerAdapter возвращал разные фрагменты для каждой позиции, но все еще на 2-й позиции показывал старый фрагмент. Для целей тестирования вgetItem Я вернул Fragment1 для всех позиций, чтобы все 3 страницы были одинаковыми, но даже после этого на 2-й позиции показывался старый экземпляр Fragment2, когда я воспроизвел проблему с шагами, упомянутыми выше.

Так как очиститьViewPager чтобы не сохранять старые фрагменты. Как обновить ViewPager, чтобы он не сохранял старую копию с фрагментами. Я думаю, что проблема с onSaveInstanceState, но мне это нужно. Как я могу исключитьViewPager когда представления сохраняются вonSaveInstanceState, я пыталсяmViewPager.setSaveEnabled(false) но это занимает слишком много памяти.

Я обнаружил, что проблема в том,instantiateItem метод адаптера не вызывает getItem, из-за которого возвращается старый фрагмент.

Ниже приведен код решения

Код:

 @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;
            }
        }

Ответы на вопрос(2)

Ваш ответ на вопрос