Fragmentos ocultos backstack re-mostrado en el cambio de configuración

Estoy construyendo una aplicación de una actividad de múltiples fragmentos. Añado al backstack después de cada transacción. Después de un par de ocultos y mostrando fragmentos y luego girar el teléfono, todos los fragmentos añadidos en el contenedor fueron restaurados y cada fragmento está encima del otro.

¿Cual puede ser el problema? ¿Por qué mi actividad muestra los fragmentos que he ocultado anteriormente?

Estoy pensando en ocultar todos los fragmentos anteriormente ocultos-ahora-mostrados, pero ¿hay una manera más "graciosa" de hacer esto?

Utilice setRetainInstance(true) en cada fragmento y su problema desaparecerá.
Advertencia: el ajuste a true cambiará el ciclo de vida de Fragmentos.
Aunque setRetainInstance(true) resuelve el problema, puede haber casos en los que no desea utilizarlo. Para solucionarlo, configure un atributo booleano en el Fragmento y restablezca la visibilidad:

 private boolean mVisible = true; @Override public void onCreate(Bundle _savedInstanceState) { super.onCreate(_savedInstanceState); if (_savedInstanceState!=null) { mVisible = _savedInstanceState.getBoolean("mVisible"); } if (!mVisible) { getFragmentManager().beginTransaction().hide(this).commit(); } // Hey! no setRetainInstance(true) used here. } @Override public void onHiddenChanged(boolean _hidden) { super.onHiddenChanged(_hidden); mVisible = !_hidden; } @Override public void onSaveInstanceState(Bundle _outState) { super.onSaveInstanceState(_outState); if (_outState!=null) { _outState.putBoolean("mVisible", mVisible); } } 

Una vez que cambie la configuración (por ejemplo, la orientación de la pantalla), la instancia se destruirá, pero el Bundle se almacenará e inyectará en la nueva instancia de Fragment.

Es posible que desee intentar utilizar la función replace() lugar de ocultar y mostrar. Tuve el mismo problema cuando empecé a usar Fragments y usar la función de reemplazar realmente ayudó a administrar los Fragments mejor. Aquí está un ejemplo rápido:

 fragmentManager.replace(R.id.fragmentContainer, desiredFragment, DESIRED_FRAGMENT_TAG) .addToBackStack(null) .commit(); 

Yo tuve el mismo problema. Debe comprobar el código fuente en la función onCreateView () de su actividad.

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); if(savedInstanceState == null){//for the first time FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentExample fragment = new FragmentExample(); fragmentTransaction.add(R.id.layout_main, fragment); fragmentTransaction.commit(); }else{//savedInstanceState != null //for configuration change or Activity UI is destroyed by OS to get memory //no need to add Fragment to container view R.id.layout_main again //because FragmentManager supported add the existed Fragment to R.id.layout_main if R.id.layout_main is existed. //here is one different between Fragment and View } } 

Activity_main.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/layout_main"> 

  • Establecer el color de la barra de estado desde DialogFragment
  • OptionsMenu de Fragmentos anidados dentro de ViewPager
  • null array error en la aplicación de google maps V2 android
  • DialogFragment llama de nuevo a la actividad, pero desea actividad para actualizar otro fragmento
  • Intentar invocar el método virtual 'void android.support.v4.view.ViewPager.setAdapter (android.support.v4.view.PagerAdapter)' en una referencia de objeto nulo
  • Android.view.InflateException: Archivo XML binario línea # 10: Error al inflar fragmento de clase
  • ¿Cómo puede manejar el descarte de un DialogFragment (compatibilidad lib) al completar un AsyncTask
  • No se puede establecer la propiedad en un fragmento con varias instancias
  • Android Definir texto de TextView en fragmento que está en FragmentPagerAdapter
  • Creación de un fragmento: constructor vs newInstance ()
  • Patrón de diseño de Android MVVM
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.