OnViewCreated – lugar equivocado para reemplazar el fragmento?
Estoy mostrando un fragmento vacío si el usuario no tiene datos. En ese emptyFragment (en onViewCreated
) compruebo una condición ya veces quisiera reemplazar ese Fragmento vacío con otro, así que llamo un método en la actividad correspondiente que reemplazó el fragmento.
Algunos usuarios (actualmente sólo Samsung, 6.0.1 pero no sé si eso significa nada) experimentan un accidente en la línea donde executePendingTransactions
:
- Android.media.audiofx.Visualizer lanzando excepción cada otra vez
- Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException 😕
- Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState, FragmentTabHost
- "No se puede realizar esta acción después de onSaveInstanceState" - ¿por qué recibo esta excepción del método onResume de mi actividad?
- Android GoogleMaps V2 MarkerDemo IllegalStateException no incluye puntos
IllegalStateException: Fatal Exception: java.lang.RuntimeException Unable to resume activity {....app.activities.MyActivity_}: java.lang.IllegalStateException: FragmentManager is already executing transactions
¿Es esto un error en 6.0.1 o es onViewCreated
el lugar equivocado para hacer esto?
EDITAR
¿Sería esto una solución posible?
if (addToBackStack) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).addToBackStack(name).commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); } else { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).commitNow(); }
- IllegalStateException con PagerAdapter
- Haga clic en el elemento que conduce a IllegalStateException
- java.lang.IllegalStateException (No se puede realizar esta acción después de onSaveInstanceState)
- Excepción de estado ilegal al intentar cambiar un marcador en un Api de Google Maps v2 desde un mensaje de Google Cloud Messaging
- Android - SQLite Cursor getColumnIndex () es sensible a mayúsculas y minúsculas?
- Java.lang.IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
- AudioTrack: play () llamado en AudioTrack no inicializado
- IllegalStateException cuando .replace el fragmento al reiniciar
En primer lugar: ¿por qué no se mueve la condición de 'verificación' en su actividad? De esta manera, puedes decidir cuál es el fragmento que necesitas: el que maneja valores vacíos o el otro.
Segundo: Sugiero leer dos pequeños tutoriales sobre fragmentos y pérdidas de estado . Puedes encontrar muchas condiciones de error relacionadas con fragmentos allí.
Y finalmente la respuesta relacionada con 'FragmentManager ya está ejecutando transacciones': hay al menos dos llamadas anidadas al método executePendingTransactions()
, eso significa que usted está preguntando al administrador de fragmentos (hay una única instancia de administrador de fragmentos por Actividad ) Para ejecutar una transacción mientras está ejecutando otra transacción. Es difícil identificar dónde está el problema, debes publicar todo el código de la Actividad y todos los Fragmentos involucrados, solo para identificar y eliminar una (la primera) llamada a executePendingTransactions, pero te puedo dar algunos consejos:
- No utilice
executePendingTransactions()
. Es difícil mantener un código que requiera una especie de orquestación entre fragmentos - Utilice
commit()
si no necesita un acceso inmediato a los fragmentos que está agregando a su actividad. El commit simple ejecutará todas las transacciones tan pronto como el hilo principal esté libre. - Si necesita un acceso inmediato a un fragmento, use
commitNow()
. Honestamente, he utilizado este método sólo unas pocas veces, principalmente para manejar correctamente DialogFragments.
commitNow()
está disponible para los dispositivos pre 24 si usa la biblioteca de soporte , que sugiero que adopte.
Intente FragmentTransaction.commitNow();
Si estás tratando con sdk 24, en lugar de usar commit()
Para versiones anteriores: FragmentManager.executePendingTransactions()
después de la llamada de commit()
- ¿Cómo generar Xamarin vinculante para AAR con muchas dependencias?
- Android Studio: combinación de sabor de producto con más de dos dimensiones de sabor (grupos de sabor)