Android Fragments recreado en el cambio de orientación

Estoy desarrollando una aplicación que básicamente tiene una ActionBar. Cuando mi aplicación se inicia, la actividad crea los fragmentos y los adjunta a cada ficha, por lo que cuando cambie obtendré diferentes vistas.

Los problemas surgen cuando intento girar el dispositivo. Después de un poco de lucha, me di cuenta de que Android recrea automáticamente los fragmentos agregados anteriormente como este:

SummaryFragment.onCreate(Bundle) line: 79 FragmentManagerImpl.moveToState(Fragment, int, int, int) line: 795 FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1032 FragmentManagerImpl.moveToState(int, boolean) line: 1014 FragmentManagerImpl.dispatchCreate() line: 1761 DashboardActivity(Activity).onCreate(Bundle) line: 864 ... 

Y luego recreo los fragmentos como de costumbre. Así que tengo los fragmentos "reales" que espero que funcionen correctamente y sus homólogos "ocultos" creados por Android que hacen que mi aplicación se bloquee. ¿Cómo puedo evitar este comportamiento? Ya intenté llamar a setRetainInstance (false) en el SummaryFragment.

Gracias

Usted necesita comprobar para un savedInstanceState [edit: en su actividad del padre], y si existe, no cree sus fragmentos.

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (savedInstanceState == null) { // Do your oncreate stuff because there is no bundle } // Do stuff that needs to be done even if there is a saved instance, or do nothing } 

Cuando cree su actividad, compruebe que no existe. Si existe, no haga nada … Android lo recreará para usted.

 private void initFragment() { FragmentManager fragMgr = getSupportFragmentManager(); if (fragMgr.findFragmentByTag(LEADERBOARD_FRAG_TAG) != null) { return; } frag = new HdrLeaderboardFragment(); FragmentTransaction ft = fragMgr.beginTransaction(); ft.replace(R.id.leaderboard_fragment_wrapper, frag, LEADERBOARD_FRAG_TAG); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit(); } 

Si tienes el ui similar (no hay archivos específicos de layout-land) para ambas orientaciones puedes establecer android:configChanges="keyboardHidden|orientation" a la actividad en tu archivo de manifiesto.

Si no proporciona por favor el código fuente en el que está agregando los fragmentos a las pestañas, y trataré de ayudarle con las mejoras.

No estoy seguro si hay una mejor solución, pero esto es lo que hice en el último programa.

Cuando un fragmento es creado automáticamente por el sistema en el cambio de orientación y si desea mantener un seguimiento de ellos en la actividad de host, captura en el método OnAttachFragment() la actividad del OnAttachFragment() . Y obtienen los argumentos de forma predeterminada, por lo que puede utilizarlos para averiguar qué fragmento es.

  public void onAttachFragment(Fragment fragment) { super.onAttachFragment(fragment); if (fragment != null) { if(fragment.getArguments() != null) { switch (fragment.getArguments().getString(ARG_PARAM1)) { case FragmentATag: if (myFragmentA != fragment) { myFragmentA = (FragmentA) fragment; } break; case FragmentBTag: if (myFragmentB != fragment) { myFragmentB = (FragmentB) fragment; } break; } } } } 
  • Manejar estados de cambios de orientación
  • ¿Cómo mantener abierta la ventana emergente cuando la orientación cambia en tiempo de ejecución en Android?
  • Detectar si el video se tomó en modo retrato / paisaje
  • Cómo obtener los detalles de portrait_id, Landscape_id y de dominio para android desde el servidor revive
  • Cómo detectar Orientación al revés en android?
  • ¿Cuál es la diferencia entre screenOrientation retrato y userPortrait
  • Cambio de la orientación del fragmento androide
  • Mejor manera: Guardar y restaurar la posición de TextView en ScrollView
  • Orientación de la captura de la cámara en dispositivos samsung en android
  • ¿Cómo hacer que la interfaz de usuario se vea igual en modo horizontal?
  • ¿Cómo definimos la orientación de una actividad en Android, basada en el dispositivo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.