Android: ¿Cuándo es apropiado utilizar FragmentTransaction.remove?
Pensé que había entendido que se supone que debes llamar a FragmentTransaction.add () en onCreate () y FragmentTransaction.remove () en onDestroy (). Mi aplicación se bloquea en onDestroy () con este error:
06-26 15:25:50.213: E/AndroidRuntime(579): java.lang.RuntimeException: Unable to destroy activity {com.myapp/com.myapp.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed
¿Cuándo debo llamar a estas cosas si no en onCreate / onDestroy ()?
- Cómo mostrar el fragmento de entrada sobre el fragmento de salida mientras se anima.
- Fragmento Transacción cargar la vista vacía, pero el fragmento se muestra después de que el dispositivo giratorio
- FragmentTransaction.replace reemplaza sólo el primer Fragment en un contenedor
- El artículo de DrawerLayout hace clic - ¿Cuándo es el momento adecuado para reemplazar el fragmento?
- La biblioteca de la barra de acciones de AppCompat no muestra fragmentos añadidos
- Salir de la animación no funciona; FragmentTransaction animación personalizada no funciona para ocultar
- Ciclo de vida del fragmento - ¿Qué método se llama mostrar / ocultar?
- Cómo agregar un fragmento a un diseño de un DialogFragment?
- ViewPager dentro de Fragmento desaparece después de transaction.remove () (Mantener instancia?)
- Cómo borrar backStack de soporte FragmentManager?
- ¿Cómo se manejan las transacciones de fragmentos cuando el estado de la actividad principal está destinado a ser guardado?
- Android: Fragmento de diálogo y problemas de Backstack
- Android - Hacer traducciones y objectAnimator en el mismo archivo XML
Mi problema con esto es que cuando cambia a mi vista horizontal, y luego de nuevo a mi vista vertical, ahora tengo un diseño duplicado para al menos uno de los fragmentos anidados.
Mi conjetura es que esto es porque usted está agregando siempre el fragmento en onCreate()
. Android recrea automáticamente fragmentos en los cambios de configuración. Por lo tanto, onCreate()
debería comprobar si el fragmento ya existe antes de añadirlo:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null) { getSupportFragmentManager().beginTransaction() .add(android.R.id.content, new RotationFragment()).commit(); } }
Ok, su solución funcionó, excepto en lugar de utilizar:
if (getSupportFragmentManager().findFragmentById(android.R.id.content)==null)
Solía:
if (savedInstanceState==null)
Al parecer, el gestor de fragmentos no está configurado por la función onCreate. Pero, puesto que su respuesta es la mayoría correcta, lo estoy marcando como una respuesta.
Quiero agradecerle de nuevo. Esta es la segunda vez que me has ayudado mucho, y realmente lo aprecio.