studio - Android FragmentTransaction commit ¿Cuándo?
how to implement fragments in android studio (3)
"... ¿ entonces puedo trabajar con el fragmento agregado ? Además, ¿hay alguna forma de esperar hasta que se produzca la confirmación y luego continuar con el resto del código ?"
Todo depende del trabajo que quieras hacer. De su pregunta veo que la mayoría de su código de trabajo debe estar en su código de fragmento de todos modos, por ejemplo, cuando se selecciona un artículo de inventario.
En la devolución de llamada cuando se selecciona un elemento de la lista de selección (para cambiar el fragmento de detalles) podrá obtener el fragmento de detalles cómodamente de todos modos.
Además, ya tiene el fragmento del retorno de FragmentsPool.getHelperFileFragment(501),
por lo que no veo por qué necesita obtener el fragmento a través de su etiqueta.
Me interesa saber qué trabajo debe hacer en onCreate
con su fragmento de detalles agregados.
Estoy construyendo una aplicación para tableta. En esta aplicación hay una actividad con dos fragmentos. El primer fragmento es un fragmento de lista "conocido" que muestra una lista de diseño de elemento simple desde una consulta de base de datos, el segundo fragmento muestra los detalles sobre el registro seleccionado (del fragmento de lista). La idea 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 del inventario, se muestran los detalles del elemento seleccionado, etc. Para comunicarme con el Fragmento de detalles, he creado una interfaz que implementa cada clase de fragmento de detalle. El fragmento de la lista se "fija" en la actividad del diseño xml. Sin embargo, el fragmento de detalle se crea durante la creación de la actividad de esta 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 fragmentTransaction.commit () no se ejecuta inmediatamente, sino que ocurre en el hilo principal la próxima vez que esté listo (como lo indica la documentación de android).
Si creo el fragmento de detalle en onStart () y crea una instancia del fragmento de la lista en onCreate todo funciona bien.
Entonces la pregunta es: ¿cómo puedo estar seguro de que fragmentTransaction.commit () ha confirmado la transacción para que pueda trabajar con el fragmento agregado? Además, ¿hay alguna forma de esperar hasta que se produzca la confirmación y luego continuar con el resto del código?
En Android API 24 FragmentTransaction
tiene el .commitNow()
synchronist .commitNow()
. Está en la referencia ahora: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitNow()
Por el contrario, .commit()
funciona de forma asíncrona. Simplemente programa una confirmación de la transacción.
Intenta ejecutar fragmentManager.executePendingTransactions()
después de confirmar tu transacción pero antes de buscar por etiqueta y ver si eso funciona para ti.