Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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 :

 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(); } 

  • Fragmento inflado en Fragmento El cuadro de diálogo arroja el error "Fragmento no creó una vista"
  • Android: no se puede destruir la actividad después de terminar, causada por IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
  • Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException :?
  • Android.media.audiofx.Visualizer lanzando excepción cada otra vez
  • Java.lang.IllegalStateException: Fragmento no adjunto a la actividad
  • Excepción de estado ilegal al intentar cambiar un marcador en un Api de Google Maps v2 desde un mensaje de Google Cloud Messaging
  • AudioTrack: play () llamado en AudioTrack no inicializado
  • Añadir pestañas a la izquierda con FragmentPagerAdapter
  • 2 Solutions collect form web for “OnViewCreated – lugar equivocado para reemplazar el fragmento?”

    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:

    1. No utilice executePendingTransactions() . Es difícil mantener un código que requiera una especie de orquestación entre fragmentos
    2. 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.
    3. 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()

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.