Usando onSaveInstanceState con fragmentos en backstack?

Tengo fragmentos que guardo en el backstack de FragmentManager. Cada estado de fragmento se guarda para los cambios de orientación con variables miembro, como por ejemplo:

@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("userId", mUserId); outState.putString("username", mUsername); } 

Mi problema es que si hay un cambio de orientación, ya que cada fragmento en el backstack se llama via onSaveInstanceState, obtengo una excepción de puntero nulo porque las variables miembro ya no existen.

¿Ideas sobre cómo solucionar esto?

Es posible que sus variables miembro no existan ya porque el FragmentManager en su Activity está muriendo con todos sus fragmentos.

onSaveInstanceState reemplazar el método onSaveInstanceState de su clase de Activity , ya que necesita guardar el estado de Activity antes de guardar el estado Fragments .

Como dice la documentación :

Hay muchas situaciones en las que un fragmento puede ser en su mayoría roto (como cuando se coloca en la pila trasera sin mostrar la interfaz de usuario), pero su estado no se guardará hasta que su actividad de propiedad realmente necesita para guardar su estado.

ACTUALIZAR

En su Activity onSaveInstanceState y onRestoreInstanceState , intente guardar las referencias de Fragment y luego restaurarlas con algo como esto:

 public void onSaveInstanceState(Bundle outState){ getFragmentManager().putFragment(outState,"myfragment",myfragment); } public void onRestoreInstanceState(Bundle inState){ myFragment = getFragmentManager().getFragment(inState,"myfragment"); } 

¡Dime entonces si tuviste suerte! Todos los derechos reservados

Basándose en Jorge Gil – 'xɔɾ.xɛ xil answer Tenga en cuenta lo siguiente:

  • No olvide llamar a las super implementaciones de onSaveInstanceState () y onRestoreInstanceState ().
  • Si está utilizando el paquete de soporte: Utilice getSupportFragmentManager () en lugar de getFragmentManager ().
  • Al recuperar su fragmento original tienes que echarlo.

Lo siento por ser Capitán obvio!

La configuración de la setRetainInstance en el fragmento ayuda. probar

Creo que la solución adecuada es leer las variables miembro de savedInstanceState en onCreate que parece ser llamado siempre antes onSaveInstanceState . Si procesa los campos en onViewCreated , no tienen la oportunidad de inicializarse antes del siguiente onSaveInstanceState (en este caso especial, cuando Fragment está en el backstack).

  • Los mismos fragmentos, edittext y requestfocus emiten
  • API de Google Maps v2 en el cuadro de diálogo
  • Llamar startIntentSenderForResult de Fragment (Android Billing v3)
  • Cómo arrastrar un botón de acción flotante sobre un paginador de vista
  • Fragmentos, cuando estoy "activo"?
  • Fragmento y ciclo de vida de la actividad de los padres juntos
  • ¿Cómo escuchar los cambios de preferencia dentro de un archivo PreferenceFragment?
  • Android Studio no puede resolver el símbolo 'TabLayout'
  • Establecer la orientación para sólo 1 fragmento en mi actividad, mientras que el resto está en el retrato
  • Cuestión en Android Fragmento: sigue haciendo clic en el fragmento anterior
  • LocationListener en el fragmento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.