Android FragmentTransaction commit ¿Cuándo?

Estoy construyendo una aplicación de tableta. En esta aplicación hay una actividad con dos fragmentos. El primer fragmento es un fragmento de lista "conocido" que muestra una simple lista de disposición de un elemento desde una consulta de base de datos, el segundo fragmento muestra los detalles del registro seleccionado (del fragmento de lista). El pensar con el segundo fragmento es que su tipo depende de los registros que se muestran en la lista. Por ejemplo, si los registros son clientes, se muestran los detalles del cliente seleccionado, si son elementos de inventario se muestran los detalles del elemento seleccionado, etc. Para poder comunicar con el fragmento de detalles he creado una interfaz que cada clase de fragmento de detalle implementa. El fragmento de lista está "fijo" en la actividad desde el layout xml. Sin embargo, el fragmento de detalle se crea durante la creación de la actividad de la siguiente manera:

super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ..... FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); ... myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); .... } 

El problema con este código es que myDetailsFragment siempre es nulo. Esto se debe a que el fragmentTransaction.commit () no se ejecuta inmediatamente, pero sucede en el subproceso principal la próxima vez que el subproceso está listo (como indica la documentación de android).

Si creo el fragmento de detalle en onStart () y instanciar el fragmento de lista en onCreate todo funciona bien.

Así que la pregunta es: ¿Cómo puedo estar seguro de que el fragmentTransaction.commit () ha confirmar la transacción para poder hacer algún trabajo con el fragmento añadido? Además, ¿hay alguna manera de esperar hasta que ocurra el commit y luego continuar con el resto del código?

Gracias por tu tiempo y esfuerzo,

Christos

Intente ejecutar fragmentManager.executePendingTransactions() después de confirmar su transacción pero antes de buscar por etiqueta y ver si funciona para usted.

En la API de Android 24 FragmentTransaction tiene el método .commitNow() síncrono. Está en la referencia ahora: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitNow ()

Por el contrario, .commit() funciona de forma asíncrona. Sólo programa un commit de la transacción.

"…. así que puedo hacer algún trabajo con el fragmento añadido ? Además, ¿hay alguna manera de esperar hasta que ocurra el commit y luego continuar con el resto del código ?"

Todo depende del trabajo que quieras hacer. De su pregunta veo que la mayor parte de su código de trabajo debe estar en su código de fragmento de todos modos, por ejemplo, cuando un elemento de inventario está seleccionado.

En la devolución de llamada cuando se selecciona un elemento de lista de selección (con el fin de cambiar el fragmento de detalles), podrá obtener el fragmento de los detalles lo suficientemente cómodo de todos modos.

Además, ya tiene el fragmento de la devolución de FragmentsPool.getHelperFileFragment(501), por lo que no veo por qué necesita obtener el fragmento a través de su etiqueta.

Estoy interesado en saber qué trabajo necesitas hacer en onCreate con tu fragmento de detalles añadidos.

  • Utilizar fragmento / actividad de aplicación externa dentro de la aplicación
  • Actualizar Navegación cajón listview
  • ¿Cuál es el punto de setArguments?
  • Transmisión de datos entre un fragmento y su actividad de contenedor
  • Obtenga GoogleMap del fragmento de ViewPager
  • Método de actividad de llamada desde dentro de un fragmento
  • ¿Cómo puedo crear la superposición de tutoriales gris semi-transparente en Android?
  • Fragmento de la transición estándar sin animar
  • Vinculación de fragmentos en listview
  • Fragmento visible en el fondo
  • Espresso Recylerview en ViewPager compara varias vistas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.