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

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.