ViewPager retaing viejos fragmentos en la rotación de pantalla

estoy usandoViewPager yFragmentStatePagerAdapter para mostrar el fragmento. Inicialmente, se agregaron 2 fragmentos Fragment1 y Fragment2 y el tercer fragmento Fragment3 se agrega en la 2ª posición después de recibir la respuesta del servidor. Entonces, después de agregar todas las páginas, esta debe ser la secuencia de Fragmentos en ViewPager -> Fragment1, Fragment3, Fragment2.

El problema es después de que se agregan Fragment1 y Fragment3 y la aplicación está haciendo una llamada al servidor antes de agregar el 3.º Fragmento en la segunda posición. Posición y 3ª posición tienen nueva copia de Fragment2. Así que Fragment3 Doest se muestra en ViewPager. Secuencia después de agregar el 3er Fragmento -> Fragmento 1, copia antigua de Fragmento 2, Nuevo Fragmento 2.

Estoy anulandoonSaveInstanceState y llamandosuper.onSaveInstanceState en mi actividad.

También he intentado volverPOSITION_NONE desdegetItemPosition. Leí en alguna parte que ViewPager guarda copias del fragmento. También a través de la depuración, verifiqué que ViewPager contenía 2 copias de Fragment2 cuando se reproducía el problema, aunquegetItem deFragmentStatePagerAdapter devolvió diferentes Fragmentos para cada posición, pero aún en la 2ª posición mostraba un fragmento antiguo. Para fines de prueba engetItem Devolví Fragment1 para todas las posiciones, de modo que las 3 páginas deberían ser iguales, pero incluso después de eso, en la 2ª posición, estaba mostrando una copia antigua de Fragment2 cuando reproduje el problema con los pasos mencionados anteriormente.

Entonces, ¿cómo aclararViewPager Para que no se guarden viejos fragmentos. Cómo actualizar ViewPager para que no retenga la copia antigua con fragmentos. Creo que el problema es con onSaveInstanceState pero lo necesito. Como puedo excluirViewPager cuando las vistas se guardan enonSaveInstanceState. Yo he tratadomViewPager.setSaveEnabled(false) pero se necesita demasiada memoria.

Encontré que el problema esinstantiateItem el método del adaptador no llama a getItem debido a que se devuelve el fragmento antiguo.

A continuación se muestra el código de la solución

Código:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta