Fragment
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
4 de septiembre de 2024 | 1.8.3 | - | - | - |
Cómo declarar dependencias
Para agregar una dependencia en Fragment, debes agregar el repositorio de Maven de Google a tu proyecto. Lee el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Groovy
dependencies { def fragment_version = "1.8.3" // Java language implementation implementation "androidx.fragment:fragment:$fragment_version" // Kotlin implementation "androidx.fragment:fragment-ktx:$fragment_version" // Compose implementation "androidx.fragment:fragment-compose:$fragment_version" // Testing Fragments in Isolation debugImplementation "androidx.fragment:fragment-testing-manifest:$fragment_version" androidTestImplementation "androidx.fragment:fragment-testing:$fragment_version" }
Kotlin
dependencies { val fragment_version = "1.8.3" // Java language implementation implementation("androidx.fragment:fragment:$fragment_version") // Kotlin implementation("androidx.fragment:fragment-ktx:$fragment_version") // Compose implementation("androidx.fragment:fragment-compose:$fragment_version") // Testing Fragments in Isolation debugImplementation("androidx.fragment:fragment-testing:$fragment_version") }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.8
Versión 1.8.3
4 de septiembre de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.3
. La versión 1.8.3 contiene estas confirmaciones.
Correcciones de errores
FragmentManager
ahora tiene en cuenta correctamente las operaciones pendientes cuando se controla el gesto atrás predictivo. Esto debería garantizar que hacer un retroceso del sistema ya no cause unaIndexOutOfBoundsException
. (I9ba32, b/342316801).AndroidFragment
ya no falla si se agrega a la composición mientras ya se guarda el estado del fragmento o la actividad que lo contiene. (I985e9, b/356643968).
Versión 1.8.2
24 de julio de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.2
. La versión 1.8.2 contiene estas confirmaciones.
Correcciones de errores
AndroidFragment
ahora procesa correctamente los casos en los que el fragmento superior se coloca en la pila de actividades del fragmento, lo que evita el mensaje "No se encontró ninguna vista para el ID". problemas cuando regresas a ese fragmento. (I94608).- Los fragmentos agregados a través del método
FragmentTransaction.add
que toma un elementoViewGroup
ahora esperanonContainerAvailable
antes de pasar aonStart()
. Esto afecta a los usuarios de esa API, comoAndroidFragment
, que ahora espera a queAndroidFragment
vuelva a ingresar a la composición antes de moverla a través deonStart()
. (I94608).
Versión 1.8.1
26 de junio de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.1
. La versión 1.8.1 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que los fragmentos sin un contenedor eran inmediatamente
DESTROYED
cuando se iniciaba un gesto atrás predictivo. Ahora se mantienen en el estadoCREATED
hasta que se complete el gesto. (If6b83, b/345244539).
Versión 1.8.0
12 de junio de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.0
. La versión 1.8.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.7.0
- El artefacto
fragment-compose
ahora contiene unComposable
AndroidFragment
que permite agregar fragmentos a la jerarquía de Compose a través del nombre de clase de fragmento. Controla automáticamente cómo guardar y restablecer el estado del fragmento. Se debe usar como reemplazo directo del enfoque recomendado anteriormente de usarAndroidViewBinding
para aumentar un fragmento. - Ahora, la devolución de llamada
onBackStackChangeCancelled
en la interfazOnBackStackChangedListener
deFragmentManager
se activa como parte de la ejecución de operaciones enFragmentManager
y la acerca a la hora de la devolución de llamadaonBackStackChangeCommitted
.
Versión 1.8.0-rc01
29 de mayo de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.0-rc01
. La versión 1.8.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- La devolución de llamada
onBackStackChangeCancelled
en la interfazFragmentManagers OnBackStackChangedListener
ahora se activa como parte de la ejecución de operaciones enFragmentManager
y la acerca a la hora de la devolución de llamada aonBackStackChangeCommitted
. (I5ebfb, b/332916112).
Versión 1.8.0-beta01
14 de mayo de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.0-beta01
. La versión 1.8.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- A partir de Fragment
1.7.1
: El gesto atrás predictivo ahora solo se ejecutará para transacciones en las que todos los fragmentos tengan un animador o una transición de Androidx que se pueda buscar Esto soluciona un problema por el que la cancelación de una transacción que se puede buscar parcialmente causaba una pantalla negra. (I43037, b/339169168).
Versión 1.8.0-alpha02
17 de abril de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.0-alpha02
. La versión 1.8.0-alpha02 contiene estas confirmaciones.
Correcciones de errores
- A partir de Fragment
1.7.0-rc02
: Se agregaron registros para indicar por qué no se ejecutará la configuración desharedElement
sin otras transiciones. (Iec48e). - A partir de Fragment
1.7.0-rc02
: Se corrigió un error por el que se producía una falla si se agregaba un elemento compartido no buscable a una transacción en la que todas las demás transiciones eran posibles. Ahora la transacción se considerará como no buscable. (I18ccd).
Versión 1.8.0-alpha01
3 de abril de 2024
Lanzamiento de androidx.fragment:fragment-*:1.8.0-alpha01
. La versión 1.8.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- El nuevo
Composable
deAndroidFragment
permite agregar fragmentos a la jerarquía de Compose con el nombre de clase del fragmento. Controla automáticamente cómo guardar y restablecer el estado del fragmento. Se puede usar como reemplazo directo de AndroidViewBindingComposable
.(b/312895363, Icf841)
Cambios en la documentación
- Se actualizó la documentación de las APIs de
OnBackStackChangedListener
para indicar cuándo se llaman y cómo se deben usar. (I0bfd9).
Actualización de dependencia
- El fragmento ahora depende de Profile Installer 1.3.1.
Versión 1.7
Versión 1.7.1
14 de mayo de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.1
. La versión 1.7.1 contiene estas confirmaciones.
Correcciones de errores
- El gesto atrás predictivo ahora solo se ejecutará para transacciones en las que todos los fragmentos tengan un animador o una transición de Androidx que se pueda buscar. De esta forma, se solucionaba un problema por el que se mostraba una pantalla en blanco al cancelar una transacción que se podía buscar parcialmente. (I43037, b/339169168).
Versión 1.7.0
1 de mayo de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0
. La versión 1.7.0 contiene estas confirmaciones.
Compatibilidad con gestos de atrás predictivo
- Los fragmentos ahora ofrecen compatibilidad con el gesto atrás predictivo de la app cuando se usa
Animator
o cuando se usa AndroidX Transition 1.5.0. Esto les permite a los usuarios usar el gesto atrás para ver el fragmento anterior cuando buscan tu animador o transición antes de decidir confirmar la transacción completando el gesto o cancelando.
Sistema de transición | Recurso XML | Admite el gesto atrás predictivo |
---|---|---|
Animation |
R.anim |
No |
Animator |
R.animator |
Sí |
Marco de trabajo Transition |
R.transition |
No |
AndroidX Transition con Transition 1.4.1 o versiones anteriores |
R.transition |
No |
AndroidX Transition con Transition 1.5.0 |
R.transition |
Sí |
Si detectas algún problema con la compatibilidad con el gesto atrás predictivo en Fragment después de habilitar el gesto atrás predictivo, informa un problema en Fragment con un proyecto de ejemplo que reproduzca tu problema. Puedes inhabilitar el gesto atrás predictivo usando FragmentManager.enabledPredictiveBack(false)
en el onCreate()
de tu actividad.
FragmentManager.OnBackStackChangedListener()
ahora proporciona onBackStackChangeProgressed()
y onBackStackChangeCancelled()
para recibir el progreso del gesto atrás predictivo y los eventos cancelados, respectivamente.
Artefacto de composición de fragmento
Se creó un nuevo artefacto fragment-compose
que se enfoca en admitir apps que están en proceso de pasar de una arquitectura basada en fragmentos a una arquitectura basada en Compose.
La primera función disponible en este artefacto nuevo es un método de extensión content
en Fragment
que busca facilitar el uso de Compose para la IU de un fragmento individual creando un ComposeView
para ti y configurando el ViewCompositionStrategy
correcto.
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Versión 1.7.0-rc02
17 de abril de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-rc02
. La versión 1.7.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Se agregaron registros para indicar por qué no se ejecutará la configuración de
sharedElement
sin ninguna otra transición. (Iec48e). - Se corrigió un error por el que, si se agregaba un elemento compartido no buscable a una transacción en la que todas las demás transiciones eran buscables, se producía una falla. Ahora la transacción se considerará como no buscable. (I18ccd).
Versión 1.7.0-rc01
3 de abril de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-rc01
. La versión 1.7.0-rc01 contiene estas confirmaciones.
Actualización de dependencia
- El fragmento ahora depende de Profile Installer 1.3.1.
Versión 1.7.0-beta01
20 de marzo de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-beta01
. La versión 1.7.0-beta01 contiene estas confirmaciones.
Cambios en la API
FragmentHostCallback
ahora está escrito en Kotlin para que la nulabilidad del tipo genérico del host coincida con la nulabilidad del tipo de datos que se muestra deonGetHost()
. (I40af5).
Correcciones de errores
- Se corrigió un problema por el que, cuando se confirmaba un gesto atrás predictivo en un fragmento que no está en un contenedor, ese fragmento nunca se destruiría. El fragmento ahora pasará inmediatamente al estado final. (Ida0d9).
- Se solucionó un problema en Fragments por el que la interrupción de las transiciones entrantes con un gesto atrás predictivo destruía la vista entrante y dejaba una pantalla en blanco. (Id3f22, b/319531491).
Versión 1.7.0-alpha10
7 de febrero de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha10
. La versión 1.7.0-alpha10 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió el problema conocido de la versión anterior de Fragment en el que, cuando se usaba la compatibilidad con el gesto atrás predictivo de Fragment para la transición de
Animator
o AndroidX, Fragments arrojaba unaNullPointerException
desdehandleOnBackProgressed
si nunca se agregabaFragmentManager.OnBackStackChangedListener
a través deaddOnBackStackChangedListener
. (I7c835).
Versión 1.7.0-alpha09
24 de enero de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha09
. La versión 1.7.0-alpha09 contiene estas confirmaciones.
Artefacto de composición de fragmento
Se creó un nuevo artefacto fragment-compose
que se enfoca en admitir apps que están en proceso de pasar de una arquitectura basada en fragmentos a una arquitectura basada en Compose.
La primera función disponible en este artefacto nuevo es un método de extensión content
en Fragment
que busca facilitar el uso de Compose para la IU de un fragmento individual creando un ComposeView
para ti y configurando el ViewCompositionStrategy
correcto. (561cb7, b/258046948).
class ExampleFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = content {
// Write your @Composable content here
val viewModel: ExampleViewModel = viewModel()
// or extract it into a separate, testable method
ExampleComposable(viewModel)
}
}
Nuevas funciones
FragmentManager.OnBackStackChangedListener()
ahora proporcionaonBackStackChangeProgressed()
yonBackStackChangeCancelled()
para recibir el progreso del gesto atrás predictivo y los eventos cancelados, respectivamente. (214b87).
Problema conocido
- Cuando se utiliza la compatibilidad con el gesto atrás predictivo de Fragment para
Animator
o la transición de AndroidX, Fragments mostrará unaNullPointerException
desdehandleOnBackProgressed
si nunca se agregóFragmentManager.OnBackStackChangedListener
a través deaddOnBackStackChangedListener
. Agregar manualmente un objeto de escucha solucionará la falla. Habrá una solución para esto disponible en la próxima versión de Fragments.
Versión 1.7.0-alpha08
10 de enero de 2024
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha08
. La versión 1.7.0-alpha08 contiene estas confirmaciones.
Realiza una limpieza
- Se quitó la solución alternativa para la biblioteca de Transition que se corrigió en Transition
1.5.0-alpha06
. (I04356).
Versión 1.7.0-alpha07
29 de noviembre de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha07
. La versión 1.7.0-alpha07 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una
NullPointerException
causada por la configuración de una transición de elementos compartidos y por no establecer una entrada/salidaTransition. (I8472b). - A partir de Fragment
1.6.2
: Cuando se aumenta el fragmento de unaFragmentContainerView
, sus estados, comoFragmentManager
, ID y host, ahora son accesibles en la devolución de llamadaonInflate
. (I1e44c, b/307427423). - Desde Fragment
1.6.2
: Cuando se usaclearBackStack
para quitar un conjunto de fragmentos, elViewModel
de cualquier fragmento anidado ahora se borra cuando se borra elViewModels
del fragmento superior. (I6d83c, b/296173018).
Versión 1.7.0-alpha06
4 de octubre de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha06
. La versión 1.7.0-alpha06 contiene estas confirmaciones.
Actualización de dependencia
- Los fragmentos se actualizaron para depender de la nueva API de
animateToStart
que se agregó en Transition1.5.0-alpha04
.
Versión 1.7.0-alpha05
20 de septiembre de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha05
. La versión 1.7.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Los fragmentos ahora brindan compatibilidad con el gesto atrás predictivo cuando se usan transiciones de Androidx. Esto te permite usar el gesto atrás para buscar el fragmento anterior con tu transición personalizada de Androidx antes de decidir confirmar o cancelar la transacción a través del gesto completado. Debes depender de la versión Transition
1.5.0-alpha03
para habilitar esta función. (Ib49b4, b/285175724).
Errores conocidos
- Actualmente, existe un problema por el que, después de cancelar un gesto atrás con una transición una vez, la próxima vez que inicies el gesto atrás no se ejecutará la transición, lo que generará una pantalla en blanco. Esto podría deberse a un problema en la biblioteca de transición. (b/300157785). Si ves este problema, infórmalo en Fragment con un proyecto de muestra que lo reproduzca. Para inhabilitar el gesto atrás predictivo, usa
FragmentManager.enabledPredictiveBack(false)
en el elementoonCreate()
de tu actividad.
Versión 1.7.0-alpha04
6 de septiembre de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha04
. La versión 1.7.0-alpha04 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema que se producía cuando se cancelaba un gesto atrás predictivo en el que los fragmentos no llegaban al estado correcto del ciclo de vida (I7cffe, b/297379023).
- Se corrigieron regresiones en las que se permitía que las animaciones se ejecutaran con transiciones. (I59f36).
- Se corrigió un problema que se producía cuando se usaba el gesto atrás predictivo con fragmentos, en el que intentar volver dos veces seguidas rápidamente en el segundo y último fragmento de la pila de actividades causaba una falla. (Ifa1a4).
Versión 1.7.0-alpha03
23 de agosto de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha03
. La versión 1.7.0-alpha03 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema con Fragments cuando se usaba el gesto atrás predictivo que hacía que se omitiera el primer fragmento de la pila de actividades del administrador de fragmentos y que se completara la actividad cuando se usaba el botón Atrás del sistema a través de la navegación con 3 botones o el gesto atrás predictivo. (I0664b, b/295231788).
Versión 1.7.0-alpha02
9 de agosto de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha02
. La versión 1.7.0-alpha02 contiene estas confirmaciones.
Correcciones de errores
- Cuando uses Fragments con gestos predictivos hacia atrás de la API 34, si usas un sistema de transición que no admite la búsqueda (
Animations
,Transitions
) o ninguna transición, los fragmentos ahora esperarán hasta que se complete el gesto antes de ejecutar la acción para retroceder. (I8100c).
Versión 1.7.0-alpha01
7 de junio de 2023
Lanzamiento de androidx.fragment:fragment-*:1.7.0-alpha01
. Esta versión se desarrolla en una rama interna.
Nuevas funciones
- Los fragmentos ahora brindan compatibilidad con el gesto atrás predictivo dentro de la app cuando se usa
Animator
. Esto te permite usar el gesto atrás para ver el fragmento anterior con tu animador personalizado antes de decidir confirmar la transacción a través del gesto completado o cancelarla. También puedes inhabilitar este comportamiento nuevo usando elenablePredictiveBack()
experimental y pasandofalse
.
Versión 1.6
Versión 1.6.2
1 de noviembre de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.2
. La versión 1.6.2 contiene estas confirmaciones.
Correcciones de errores
- Cuando el fragmento de una
FragmentContainerView
aumenta, sus estados comoFragmentManager
, ID y host ahora son accesibles en la devolución de llamadaonInflate
. (I1e44c, b/307427423). - Cuando uses
clearBackStack
para quitar un conjunto de fragmentos, ahora se borrará cualquier elementoViewModel
de fragmento anidado cuando también se borre el elementoViewModels
del fragmento superior. (I6d83c, b/296173018).
Versión 1.6.1
26 de julio de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.1
. La versión 1.6.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que el estado guardado que se almacenaba cuando se detenía la actividad, pero no se destruía, se almacenaba en caché de forma incorrecta incluso después de que la instancia del fragmento volviera al estado
RESUMED
. Esto haría que se reutilice el estado almacenado en caché si esa instancia del fragmento estaba en la pila de actividades cuando se usaba la API de varias pilas de actividades para guardar y restablecer ese fragmento. (I71288, b/246289075).
Actualización de dependencia
- Fragment ahora depende de Activity versión 1.7.2 Esto soluciona un problema por el que los usuarios de Kotlin no podían extender
ComponentDialog
sin una dependencia explícita en Activity. (b/287509323).
Versión 1.6.0
7 de junio de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0
. La versión 1.6.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.5.0
- El estado guardado de
Fragment
se dividió por completo entre el estado de biblioteca privada (clasesParcelable
personalizadas) y el estado proporcionado por el desarrollador, que ahora siempre se almacena en unBundle
que permite determinar con exactitud el origen del estado de un fragmento - Se expandió la interfaz
FragmentManager.OnBackStackChangedListener
con dos devoluciones de llamada adicionales deonBackStackChangeStarted
yonBackStackChangeCommitted
que se llaman con cadaFragment
justo antes de que se agreguen o quiten de la pila de actividades del fragmento y justo después de que se confirme la transacción, respectivamente. FragmentStrictMode
agregó una nuevaWrongNestedHierarchyViolation
que detecta cuándo un fragmento secundario está anidado dentro de su jerarquía de vista superior, pero no se lo agregó alchildFragmentManager
superior- Las APIs de
Fragment
yFragmentManager
que toman unIntent
oIntentSender
ahora tienen la anotación correcta con@NonNull
para evitar pasar un valor nulo, ya que un valor nulo siempre provocaría una falla inmediata en las respectivas APIs del framework de Android a las que llaman estos métodos. DialogFragment
ahora proporciona acceso aComponentDialog
subyacente a través de la API derequireComponentDialog()
.- El fragmento ahora depende de Lifecycle
2.6.1
- El fragmento ahora depende de SavedState
1.2.1
. - El fragmento ahora depende de ProfileInstaller
1.3.0
. El artefacto
fragment-testing-manifest
separa las entradas del manifiesto del resto de los componentes de prueba de fragmentos. Esto significa que puedes hacer lo siguiente:debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z") androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Esto evita conflictos debido al sesgo de versiones entre
fragment-testing
yandroidx.test
Versión 1.6.0-rc01
10 de mayo de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-rc01
. La versión 1.6.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error que provocaba que los objetos
ActivityResult
se enviaran con un código de solicitud incorrecto cuando se realizaban varias solicitudesstartActivityForResult
consecutivas. (If0b9d, b/249519359). - Se corrigió un problema en el que se enviaban las devoluciones de llamada
onBackStackChangeListener
para las transacciones que en realidad no cambiaban la pila de actividades si se mezclaban con transacciones que sí lo hacen. (I0eb5c, b/279306628).
Versión 1.6.0-beta01
19 de abril de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-beta01
. La versión 1.6.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Usar
postponeEnterTransition
con un tiempo de espera y, luego, reemplazar el fragmento pospuesto ya no genera una fuga del fragmento pospuesto. (I2ec7d, b/276375110). - Las nuevas devoluciones de llamada
onBackStackChangeStarted
yonBackStackChangeCommitted
ahora solo despacharán un fragmento una vez, incluso si varias transacciones contienen el mismo fragmento. (Ic6b69).
Versión 1.6.0-alpha09
5 de abril de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-alpha09
. La versión 1.6.0-alpha09 contiene estas confirmaciones.
Cambios en la API
DialogFragment
ahora proporciona acceso aComponentDialog
subyacente a través de la API derequireComponentDialog()
. (I022e3, b/234274777).- Las APIs de fragmentos
commitNow()
,executePendingTransactions()
ypopBackStackImmediate()
se anotaron con@MainThread
, lo que significa que ahora todas arrojarán errores de compilación cuando no se las llame desde el subproceso principal, en lugar de esperar que fallen en el tiempo de ejecución. (Ic9665, b/236538905).
Correcciones de errores
- Se corrigió un error en
FragmentManager
por el que guardar y restablecer en el mismo fotograma podía causar una falla. (Ib36af, b/246519668). - Las devoluciones de llamada de
OnBackStackChangedListener
onBackStackChangeStarted
yonBackStackChangeCommitted
ahora solo se ejecutan cuando se cambia la pila de actividades deFragmentManager
. (I66055, b/274788957).
Versión 1.6.0-alpha08
22 de marzo de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-alpha08
. La versión 1.6.0-alpha08 contiene estas confirmaciones.
Cambio de comportamiento
- Se ajustó el tiempo de la devolución de llamada
OnBackStackChangedListener.onBackStackChangeCommited
para que se ejecute antes de que se ejecuten las operaciones de fragmentos. Esto garantiza que la devolución de llamada nunca reciba un fragmento separado. (I66a76, b/273568280).
Correcciones de errores
- A partir de Fragment
1.5.6
: Se solucionó un problema por el que la llamada aclearFragmentResultListener
dentro de unsetFragmentResultListener
no funcionaba siLifecycle
ya eraSTARTED
y ya había un resultado disponible (If7458).
Actualizaciones de dependencias
- El fragmento ahora depende de Lifecycle
2.6.1
(586fe7). - El fragmento ahora depende de SavedState
1.2.1
. (078e4e). - El fragmento ahora depende de ProfileInstaller
1.3.0
. (3fc05b).
Versión 1.6.0-alpha07
8 de marzo de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-alpha07
. La versión 1.6.0-alpha07 contiene estas confirmaciones.
Correcciones de errores
- A partir de Fragment
1.5.6
: Se solucionó un problema por el que la eliminación de cualquier fragmento, ya sea que se hubieran agregado elementos de menú o no, invalidaba el menú de la actividad. (50f098, b/244336571).
Versión 1.6.0-alpha06
22 de febrero de 2023
Lanzamiento de androidx.fragment:fragment-*:1.6.0-alpha06
. La versión 1.6.0-alpha06 contiene estas confirmaciones.
Cambio de comportamiento
- Ahora se ejecutará la nueva devolución de llamada de
onBackStackChangedStarted
en elonBackStackChangedListener
deFragmentManager
antes de que los fragmentos comiencen a pasar a sus estados de destino (I34726).
Versión 1.6.0-alpha05
8 de febrero de 2023
Se lanzó androidx.fragment:fragment-*:1.6.0-alpha05
. La versión 1.6.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- La interfaz
FragmentManager.OnBackStackChagnedListener
ahora ofrece dos devoluciones de llamada adicionales,onBackStackChangeStarted
yonBackStackChangeCommitted
, que permiten información adicional y control sobre cuándo se producen cambios en la pila de actividades enFragmentManager
(Ib7ce5, b/238686802).
Cambios en la API
- Las APIs de
Fragment
yFragmentManager
que toman un objetoIntent
oIntentSender
ahora tienen la anotación correcta con@NonNull
para evitar pasar un valor nulo, ya que un valor nulo siempre provocaría fallas de forma respectiva en las APIs del framework de Android a las que llaman estos métodos (I06fd4).
Versión 1.6.0-alpha04
7 de diciembre de 2022
Lanzamiento de androidx.fragment:fragment-*:1.6.0-alpha04
. La versión 1.6.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
FragmentStrictMode
agregó una nuevaWrongNestedHierarchyViolation
que detecta cuándo un fragmento secundario está anidado dentro de su jerarquía de vista superior, pero no se lo agregó alchildFragmentManager
superior (I72521, b/249299268).
Cambios en el comportamiento
- Los fragmentos ahora restablecen su estado
SavedStateRegistry
antes deonAttach()
, lo que garantiza que estén disponibles desde todos los métodos de ciclo de vida ascendentes (I1e2b1).
Cambios en la API
- El artefacto
fragment-testing-manifest
separa las entradas del manifiesto del resto de los componentes de prueba de fragmentos. Esto significa que puedes hacer lo siguiente:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
Se evitan los conflictos debido a la desviación de la versión entre fragment-testing
y androidx.test
(I8e534, b/128612536).
Correcciones de errores
- A partir de Fragment
1.5.5
: los fragmentos ya no guardarán de forma incorrecta el estadoViewModel
como parte del estado guardado del registro de vistas (I10d2b, b/253546214).
Versión 1.6.0-alpha03
5 de octubre de 2022
Lanzamiento de androidx.fragment:fragment:1.6.0-alpha03
, androidx.fragment:fragment-ktx:1.6.0-alpha03
y androidx.fragment:fragment-testing:1.6.0-alpha03
. La versión 1.6.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Ahora las clases que extienden
DialogFragment
deberán llamar a super en sus anulaciones deonDismiss()
(I14798, b/238928865).
Correcciones de errores
- Se corrigieron las regresiones que generaba la integración de las interfaces de devolución de llamada del proveedor nuevo (
OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) a fin de garantizar que los fragmentos siempre obtengan las devoluciones de llamada correctas (I9b380,I34581, I8dfe6, b/242570955, If9d6b, Id0096,I690b3, I2cba2).
Versión 1.6.0-alpha02
24 de agosto de 2022
Se lanzaron androidx.fragment:fragment:1.6.0-alpha02
, androidx.fragment:fragment-ktx:1.6.0-alpha02
y androidx.fragment:fragment-testing:1.6.0-alpha02
. La versión 1.6.0-alpha02 contiene estas confirmaciones.
Correcciones de errores
- A partir de Fragment
1.5.2
: Se solucionó un problema en el que la ejecución de una transacciónpopBackStack()
y otrareplace()
al mismo tiempo generaba que los fragmentos salientes ejecutaran el objetoAnimation
/Animator
incorrecto (Ib1c07, b/214835303).
Versión 1.6.0-alpha01
27 de julio de 2022
Lanzamiento de androidx.fragment:fragment:1.6.0-alpha01
, androidx.fragment:fragment-ktx:1.6.0-alpha01
y androidx.fragment:fragment-testing:1.6.0-alpha01
. La versión 1.6.0-alpha01 contiene estas confirmaciones.
Cambios en el comportamiento
- El estado guardado de
Fragment
se dividió por completo entre el estado de biblioteca privada (clasesParcelable
personalizadas) y el estado proporcionado por el desarrollador, que ahora siempre se almacena en unBundle
que permite determinar con exactitud el origen del estado de un fragmento (b/207158202).
Correcciones de errores
- A partir de Fragment
1.5.1
: Se corrigió una regresión enDialogFragmentCallbacksDetector
en la que el uso de la versión de lint incluida en AGP 7.4 hacía que lint fallara (b/237567009).
Actualización de dependencia
- A partir de Fragment
1.5.1
: La biblioteca de Fragment ahora depende de Lifecycle2.5.1
(Id204c). - A partir de Fragment
1.5.1
: La biblioteca de Fragment ahora depende de Activity1.5.1
(I10f07).
Versión 1.5
Versión 1.5.7
19 de abril de 2023
Lanzamiento de androidx.fragment:fragment:1.5.7
, androidx.fragment:fragment-ktx:1.5.7
y androidx.fragment:fragment-testing:1.5.7
. La versión 1.5.7 contiene estas confirmaciones.
Correcciones de errores
- Usar
postponeEnterTransition
con un tiempo de espera y, luego, reemplazar el fragmento pospuesto ya no genera una fuga del fragmento pospuesto. (I2ec7d, b/276375110).
Versión 1.5.6
22 de marzo de 2023
Lanzamiento de androidx.fragment:fragment:1.5.6
, androidx.fragment:fragment-ktx:1.5.6
y androidx.fragment:fragment-testing:1.5.6
. La versión 1.5.6 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que la eliminación de un fragmento, ya sea que hubiera agregado elementos de menú o no, invalidaba el menú de la actividad. (50f098, b/244336571).
- Se solucionó un problema por el que la llamada a
clearFragmentResultListener
dentro de unsetFragmentResultListener
no funcionaba siLifecycle
ya eraSTARTED
y ya había un resultado disponible. (If7458).
Versión 1.5.5
7 de diciembre de 2022
Lanzamiento de androidx.fragment:fragment:1.5.5
, androidx.fragment:fragment-ktx:1.5.5
y androidx.fragment:fragment-testing:1.5.5
. La versión 1.5.5 contiene estas confirmaciones.
Correcciones de errores
- Los fragmentos ya no guardarán de forma incorrecta el estado
ViewModel
como parte del estado guardado del registro de vistas (I10d2b, b/253546214).
Versión 1.5.4
24 de octubre de 2022
Lanzamiento de androidx.fragment:fragment:1.5.4
, androidx.fragment:fragment-ktx:1.5.4
y androidx.fragment:fragment-testing:1.5.4
. La versión 1.5.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error en el que el uso de un
FragmentController
personalizado con un host que no implementa una interfaz de devolución de llamada del proveedor (OnConfigurationChangedProvider
,OnMultiWindowModeChangedProvider
,OnTrimMemoryProvider
,OnPictureInPictureModeChangedProvider
) y la llamada a su función de envío obsoleta hacía que no se enviara a los fragmentos secundarios (I9b380).
Versión 1.5.3
21 de septiembre de 2022
Se lanzaron androidx.fragment:fragment:1.5.3
, androidx.fragment:fragment-ktx:1.5.3
y androidx.fragment:fragment-testing:1.5.3
. La versión 1.5.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error que causaba que los fragmentos de la pila de actividades recibieran devoluciones de llamada
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
yonConfigurationChanged()
(I34581, I8dfe6 y b/242570955). - Los fragmentos secundarios anidados ya no recibirán varias devoluciones de llamada
onMultiWindowModeChanged()
,onPictureInPictureModeChanged()
,onLowMemory()
oonConfigurationChanged()
(I690b3, Id0096, If9d6b y I2cba2).
Versión 1.5.2
10 de agosto de 2022
Lanzamiento de androidx.fragment:fragment:1.5.2
, androidx.fragment:fragment-ktx:1.5.2
y androidx.fragment:fragment-testing:1.5.2
. La versión 1.5.2 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema en el que la ejecución de una transacción
popBackStack()
yreplace()
al mismo tiempo podía generar que los fragmentos salientes ejecutaran el objetoAnimation
/Animator
incorrecto (Ib1c07, b/214835303).
Versión 1.5.1
27 de julio de 2022
Lanzamiento de androidx.fragment:fragment:1.5.1
, androidx.fragment:fragment-ktx:1.5.1
y androidx.fragment:fragment-testing:1.5.1
. La versión 1.5.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una regresión en
DialogFragmentCallbacksDetector
en la que el uso de la versión de lint incluida en AGP 7.4 hacía que lint fallara (b/237567009).
Actualización de dependencia
- La biblioteca de Fragment ahora depende de Lifecycle
2.5.1
(Id204c). - La biblioteca de Fragment ahora depende de Activity
1.5.1
(I10f07).
Versión 1.5.0
29 de junio de 2022
Se lanzaron androidx.fragment:fragment:1.5.0
, androidx.fragment:fragment-ktx:1.5.0
y androidx.fragment:fragment-testing:1.5.0
. La versión 1.5.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.4.0
- Integración de CreationExtras:
Fragment
ahora puede proporcionar unViewModelProvider.Factory
sin estado a través delCreationExtras
de Lifecycle2.5.0
. - Integración de diálogos de componentes:
DialogFragment
ahora usaComponentDialog
a través de Activity1.5.0
como el diálogo predeterminado que muestraonCreateDialog()
. - Refactorización del estado de las instancias guardado: Los fragmentos comenzaron a cambiar la forma en que guardan el estado de sus instancias. Este es un esfuerzo para identificar claramente qué estado se guardó en el fragmento y la fuente de estado. Entre los cambios actuales, se incluyen los siguientes:
FragmentManager
ahora guarda su estado de instancia guardado en unBundle
, en lugar de hacerlo directamente en unParcelable
personalizado.- Los resultados configurados a través de
Fragment Result APIs
que aún no se entregaron ahora se guardan por separado del estado interno deFragmentManager
. - El estado asociado con cada fragmento ahora se guarda por separado del estado interno de
FragmentManager
, lo que te permite relacionar la cantidad de estado guardado asociado con un fragmento individual con los IDs únicos presentes en el registro de depuración deFragment
.
Otros cambios
FragmentStrictMode
ahora permite que fragmentos privados de terceros omitan penalizaciones por incumplimiento específicas usandoallowViolation()
con el nombre de clase.- Dejaron de estar disponibles las APIs de Fragment para proporcionar un menú a la
ActionBar
de tu actividad. Las APIs deMenuHost
yMenuProvider
que se agregaron en Activity1.4.0
brindan una plataforma de API equivalente apta para ciclos de vida que se puede probar y que los fragmentos deben usar.
Versión 1.5.0-rc01
11 de mayo de 2022
Se lanzaron androidx.fragment:fragment:1.5.0-rc01
, androidx.fragment:fragment-ktx:1.5.0-rc01
y androidx.fragment:fragment-testing:1.5.0-rc01
. La versión 1.5.0-rc01 contiene estas confirmaciones.
Refactorización del estado de las instancias guardado
- El estado asociado con cada fragmento ahora se guarda por separado del estado interno de
FragmentManager
, lo que te permite relacionar la cantidad de estado guardado asociado con un fragmento individual con los IDs únicos presentes en el registro de depuración de fragmento (a153e0, b/207158202).
Versión 1.5.0-beta01
20 de abril de 2022
Se lanzaron androidx.fragment:fragment:1.5.0-beta01
, androidx.fragment:fragment-ktx:1.5.0-beta01
y androidx.fragment:fragment-testing:1.5.0-beta01
. La versión 1.5.0-beta01 contiene estas confirmaciones.
Cambios en la API
DialogFragment
agregó un nuevo métododismissNow
que usacommitNow
para la paridad con la funciónshowNow
. Ten en cuenta que esto no hará queDialog
se descarte de inmediato, sino que solo actualizará el estado deFragmentManager
de manera síncrona (I15c36, b/72644830).
Refactorización del estado de las instancias guardado
FragmentManager
ahora guarda su estado de instancia guardado en unBundle
, en lugar de hacerlo directamente en unParcelable
personalizado. Este es el primer paso para proporcionar transparencia adicional respecto de lo que en realidad guarda Fragments (I93807, b/207158202).- Los resultados configurados mediante las APIs de Fragment Result que aún no se entregaron ahora se guardan por separado del estado interno de
FragmentManager
. Esto permitirá una transparencia adicional sobre los resultados que se guardan como parte del estado de la instancia guardado (I6ea12, b/207158202).
Versión 1.5.0-alpha05
6 de abril de 2022
Se lanzaron androidx.fragment:fragment:1.5.0-alpha05
, androidx.fragment:fragment-ktx:1.5.0-alpha05
y androidx.fragment:fragment-testing:1.5.0-alpha05
. La versión 1.5.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se dio de baja el
setHasOptionsMenu()
deFragment
. Para administrar los menús y sus elementos de menú, se deben usar las nuevas APIs de menú en función de las notas de la versión de Fragment1.5.0-alpha04
(I7b4b4, b/226438239).
Versión 1.5.0-alpha04
23 de marzo de 2022
Se lanzaron androidx.fragment:fragment:1.5.0-alpha04
, androidx.fragment:fragment-ktx:1.5.0-alpha04
y androidx.fragment:fragment-testing:1.5.0-alpha04
. La versión 1.5.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Dejaron de estar disponibles las APIs de Fragment para proporcionar un menú al elemento
ActionBar
de tu actividad, ya que vinculan estrechamente tu fragmento con tu actividad y no se pueden probar de forma aislada. Las APIs deMenuHost
yMenuProvider
que se agregaron en Activity1.4.0-alpha01
brindan una plataforma de API equivalente apta para ciclos de vida que se puede probar y que los fragmentos deben usar (I50a59, I20758).
Correcciones de errores
SavedStateViewFactory
ahora admite el uso deCreationExtras
, incluso cuando se inicializó con unSavedStateRegistryOwner
. Si se proporcionan elementos adicionales, se ignoran los argumentos inicializados (I6c43b, b/224844583).
Versión 1.5.0-alpha03
23 de febrero de 2022
Se lanzaron androidx.fragment:fragment:1.5.0-alpha03
, androidx.fragment:fragment-ktx:1.5.0-alpha03
y androidx.fragment:fragment-testing:1.5.0-alpha03
. La versión 1.5.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Ahora puedes transferir
CreationExtras
a las funcionesby viewModels()
yby activityViewModels()
(Ibefe7, b/217601110).
Cambios en el comportamiento
DialogFragment
ahora usaComponentDialog
como el diálogo predeterminado que muestraonCreateDialog()
(If3784, b/217618170).
Versión 1.5.0-alpha02
9 de febrero de 2022
Lanzamiento de androidx.fragment:fragment:1.5.0-alpha02
, androidx.fragment:fragment-ktx:1.5.0-alpha02
y androidx.fragment:fragment-testing:1.5.0-alpha02
. La versión 1.5.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
FragmentStrictMode
ahora permite que fragmentos privados de terceros omitan penalizaciones por incumplimiento específicas usandoallowViolation()
con el nombre de clase (I8f678).
Versión 1.5.0-alpha01
26 de enero de 2022
Lanzamiento de androidx.fragment:fragment:1.5.0-alpha01
, androidx.fragment:fragment-ktx:1.5.0-alpha01
y androidx.fragment:fragment-testing:1.5.0-alpha01
. La versión 1.5.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
Fragment
ahora se integra con ViewModel CreationExtras, que se introdujo como parte de Lifecycle2.5.0-alpha01
(I3060b, b/207012585).
Correcciones de errores
- A partir de Fragment
1.4.1
:FragmentContainerView
ya no arroja una excepción de estado ilegal cuando los IDs de vista que se generan desde XML tienen valores negativos (Ic185b, b/213086140). - A partir de Fragment
1.4.1
: Cuando usas una lambdaownerProducer
personalizada con la función diferidaby viewModels()
, se usarádefaultViewModelProviderFactory
de ese propietario, si no se proporciona unViewModelProvider.Factory
personalizado, en lugar de usar siempre la fábrica de este fragmento (I56170, b/214106513). - Se corrigió una falla que se producía cuando se intentaba acceder a un objeto
ViewModel
por primera vez desde una devolución de llamadaregisterForActivityResult()
de un elementoFragment
(Iea2b3).
Versión 1.4
Versión 1.4.1
26 de enero de 2022
Lanzamiento de androidx.fragment:fragment:1.4.1
, androidx.fragment:fragment-ktx:1.4.1
y androidx.fragment:fragment-testing:1.4.1
. La versión 1.4.1 contiene estas confirmaciones.
Correcciones de errores
FragmentContainerView
ya no arroja una excepción de estado ilegal cuando los IDs de vista que se generan a partir de XML tienen valores negativos (Ic185b, b/213086140).- Cuando usas una lambda
ownerProducer
personalizada con la función diferidaby viewModels()
, se usarádefaultViewModelProviderFactory
de ese propietario, si no se proporciona unaViewModelProvider.Factory
personalizada, en lugar de usar siempre la fábrica de este fragmento (I56170, b/214106513).
Versión 1.4.0
17 de noviembre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0
, androidx.fragment:fragment-ktx:1.4.0
y androidx.fragment:fragment-testing:1.4.0
. La versión 1.4.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.3.0
- Las APIs de
FragmentStrictMode
brindan comprobaciones de tiempo de ejecución que te permiten verificar que tu app o las bibliotecas de las que dependes no llamen a APIs de fragmentos que dejaron de estar disponibles. Cuando se detecta una infracción, puedes imprimir un mensaje de registro, activar tu propio objeto de escucha personalizado o cerrar la app. LaFragmentStrictMode.Policy
que controla las comprobaciones que están habilitadas y las "sanciones" que se activan se puede configurar en unFragmentManager
a través del nuevo métodosetStrictModePolicy()
. Esa política se aplica a eseFragmentManager
y de forma transitiva a cualquier administrador de fragmentos secundario que no establezca su propia política única. Consulta StrictMode para fragmentos. Ahora,
FragmentContainerView
proporciona un métodogetFragment()
que muestra el fragmento que se agregó al contenedor más recientemente. Esta vista usa la misma lógica quefindFragmentById()
con el ID deFragmentContainerView
, pero permite encadenar la llamada.val navController = binding.container.getFragment<NavHostFragment>().navController
FragmentScenario
ahora implementaCloseable
, lo que te permite usarlo con el métodouse
de Kotlin o con try-with-resources.Se agregó
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
para especificar si se debe habilitar la animación de transición de Activity estándar tomada de tu tema en la transición de Fragments.Se quitó la API experimental de
FragmentManager.enableNewStateManager(boolean)
, y ahora el nuevo administrador de estado es la única opción disponible.
Varias pilas de actividades
FragmentManager
mantiene una pila de actividades compuesta por transacciones de fragmentos que usaban addToBackStack()
. Esto te permite revertir esas transacciones y regresar al estado anterior con los mecanismos para guardar el estado con fragmentos a fin de que tus fragmentos puedan restablecer su estado correctamente.
En esta versión, se amplían estos mecanismos mediante tres APIs de FragmentManager
nuevas: saveBackStack(String name)
, restoreBackStack(String name)
y clearBackStack(String name)
. Estas APIs usan el mismo name
que addToBackStack()
para guardar el estado de FragmentTransaction
y el de cada fragmento que se agregó en esas transacciones. Además, te permiten restablecer más tarde esas transacciones y sus fragmentos con los estados intactos. Esto te permite "intercambiar" entre varias pilas de actividades guardando la actual y restableciendo una pila guardada.
saveBackStack()
funciona de manera similar a popBackStack()
por el hecho de que es asíncrona y que da como resultado la reversión del nombre de todas las transacciones de fragmentos a ese específico, además de destruir y quitar cualquier fragmento agregado. Sin embargo, tiene algunas diferencias:
saveBackStack()
es siempre inclusiva.- A diferencia de
popBackStack()
, que revertirá todas las transacciones de la pila de actividades si no se encuentra el nombre especificado en ella o si se proporciona un nombre nulo,saveBackStack()
no hace nada si no confirmas previamente una transacción de fragmento usandoaddToBackStack()
con ese nombre no nulo específico. - Se guarda el estado de todos los fragmentos agregados de esas transacciones. Esto significa que se almacena el estado de la vista de cada fragmento, se llama al
onSaveInstanceState()
de cada fragmento y se restablece ese estado, y se retiene cualquier instancia deViewModel
asociada con esos fragmentos (y no se llama aonCleared()
en ellos).
Las transacciones de fragmentos que se pueden usar con saveBackStack()
deben cumplir con estos criterios específicos:
- Toda transacción de fragmentos debe usar
setReorderingAllowed(true)
para garantizar que las transacciones se puedan restablecer como una única operación atómica. - El conjunto de transacciones guardadas debe ser independiente (es decir, estas no deben hacer referencia explícitamente a ningún fragmento fuera de ese conjunto) para garantizar que se puedan restablecer las transacciones en cualquier momento, sin importar los cambios que se hagan a la pila de actividades en el tiempo de intervención.
- Ningún fragmento guardado puede retenerse o tener un fragmento retenido en su conjunto de transición de fragmentos secundarios para garantizar que el
FragmentManager
no muestre ninguna referencia a fragmentos guardados después de que se guarde la pila de actividades.
De manera similar a saveBackStack()
, restoreBackStack()
y clearBackStack()
, que restablecerían o borrarían respectivamente una pila de actividades que se haya guardado antes, no realizan ninguna acción si no llamaste primero a saveBackStack()
con el mismo nombre.
Para obtener más información, consulta Varias pilas de actividades: un análisis detallado.
Versión 1.4.0-rc01
3 de noviembre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-rc01
sin modificaciones desde Fragment 1.4.0-beta01. La versión 1.4.0-rc01 contiene estas confirmaciones.
Versión 1.4.0-beta01
27 de octubre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-beta01
, androidx.fragment:fragment-ktx:1.4.0-beta01
y androidx.fragment:fragment-testing:1.4.0-beta01
. La versión 1.4.0-beta01 contiene estas confirmaciones.
Correcciones de errores
- Los fragmentos superiores ahora enviarán
onHiddenChanged()
a toda su jerarquía antes de iniciar su propia devolución de llamada (Iedc20, b/77504618). - El teclado se cerrará automáticamente cuando se pase de un fragmento con un teclado abierto a un fragmento con una vista de reciclador (I8b842, b/196852211).
DialogFragment
ahora usasetReorderingAllowed(true)
para todas las transacciones que crea cuando llamas ashow()
,showNow()
odismiss()
(Ie2c14).- La advertencia de lint que era demasiado larga de
DetachAndAttachFragmentInSameFragmentTransaction
se acortó aDetachAndAttachSameFragment
(e9eca3).
Versión 1.4.0-alpha10
29 de septiembre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha10
, androidx.fragment:fragment-ktx:1.4.0-alpha10
y androidx.fragment:fragment-testing:1.4.0-alpha10
. La versión 1.4.0-alpha10 contiene estas confirmaciones.
Lint
- Se agregó la advertencia de lint
DetachAndAttachFragmentInSameFragmentTransaction
para detectar la llamada adetach()
yattach()
en el mismoFragment
, en el mismoFragmentTransaction
. Ya que estas operaciones complementarias se cancelan entre sí cuando se realizan en la misma transacción, deben dividirse en transacciones distintas para realizar cualquier acción (aosp/1832956, b/200867930) - Se agregó el error de lint
FragmentAddMenuProvider
para corregir los usos del ciclo de vida de Fragment al ciclo de vida de la vista de Fragment cuando se usa la APIaddMenuProvider
deMenuHost
. (aosp/1830457, b/200326272)
Actualizaciones de la documentación
- El mensaje que indica que las APIs ahora están a cargo de las APIs de Activity Result, es decir,
startActivityForResult
,startIntentSenderForResult
,onActivityResult
,requestPermissions
yonRequestPermissionsResult
, se expandieron con más detalles (cce80f) - Se expandió el mensaje de baja de
onActivityCreated()
paraFragment
yDialogFragment
con más detalles. (224db4)
Versión 1.4.0-alpha09
15 de septiembre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha09
, androidx.fragment:fragment-ktx:1.4.0-alpha09
y androidx.fragment:fragment-testing:1.4.0-alpha09
. La versión 1.4.0-alpha09 contiene estas confirmaciones.
Nuevas funciones
- Ahora, puedes llamar a
clearBackStack(name)
para borrar cualquier estado que se guardó anteriormente consaveBackStack(name)
. (I70cd7)
Cambios en la API
- La clase
FragmentContainerView
se reescribió en Kotlin para garantizar que la funcióngetFragment
respete la nulabilidad de manera correcta. (If694a, b/189629145) - Ahora, FragmentStrictMode está escrito en Kotlin. (I11767, b/199183506)
Correcciones de errores
- Se solucionó un problema por el que no se borraba correctamente el estado de un objeto Fragment que se agregaba con
setReorderingAllowed(true)
y que se quitaba de inmediato antes de ejecutar las transacciones pendientes. (I8ccb8)
Versión 1.4.0-alpha08
1 de septiembre de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha08
, androidx.fragment:fragment-ktx:1.4.0-alpha08
y androidx.fragment:fragment-testing:1.4.0-alpha08
. La versión 1.4.0-alpha08 contiene estas confirmaciones.
Correcciones de errores
- Se mejoró la comprobación de lint de
UseRequireInsteadOfGet
para controlar mejor los paréntesis redundantes. (I2d865) - Se mejoró la comprobación de lint de
UseGetLayoutInflater
para controlar casos extremos adicionales. (Ie5423)
Versión 1.4.0-alpha07
18 de agosto de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha07
, androidx.fragment:fragment-ktx:1.4.0-alpha07
y androidx.fragment:fragment-testing:1.4.0-alpha07
sin cambios notables. La versión 1.4.0-alpha07 contiene estas confirmaciones.
Versión 1.4.0-alpha06
4 de agosto de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha06
, androidx.fragment:fragment-ktx:1.4.0-alpha06
y androidx.fragment:fragment-testing:1.4.0-alpha06
. La versión 1.4.0-alpha06 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema relacionado con varias pilas de actividades al intercambiar rápidamente entre las pilas de actividades que aparecían como
IllegalStateException
mientras se restauraba unaFragmentTransaction
o como una segunda copia de un fragmento que aparece. (I9039f) - Se corrigió un problema por el que
FragmentManager
mantenía una copia del estado que se guardó antes a través desaveBackStack()
, incluso después de que se restableció ese estado. (Ied212) - El método
dismissAllowingStateLoss()
deDialogFragment
ya no falla cuando lo llamas después de que se guarda el estado cuando se agrega específicamente el DialogFragment a través del métodoshow(FragmentTransaction, String)
. (I84422)
Versión 1.4.0-alpha05
21 de julio de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha05
, androidx.fragment:fragment-ktx:1.4.0-alpha05
y androidx.fragment:fragment-testing:1.4.0-alpha05
. La versión 1.4.0-alpha05 contiene estas confirmaciones.
Correcciones de errores
- Desde Fragment
1.3.6
: La vista de Fragment ahora se configura correctamente enGONE
cuando se usahide()
y la vista raíz tiene el valortransitionGroup=”true”
configurado. (aosp/1766655, b/193603427) - A partir de Fragment
1.3.6
:FragmentActivity
ahora desbloquea el estado guardado como la primera operación en las devoluciones de llamada del ciclo de vida que anula. (I6db7a)
Actualización de dependencia
- A partir de Fragment
1.3.6
: Los fragmentos ahora dependen de Activity1.2.4
(I3a66c).
Versión 1.4.0-alpha04
30 de junio de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha04
, androidx.fragment:fragment-ktx:1.4.0-alpha04
y androidx.fragment:fragment-testing:1.4.0-alpha04
. La versión 1.4.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Ahora,
FragmentManager
usaSavedStateRegistry
, de forma interna, para guardar su estado. Los métodossaveAllState()
yrestoreSavedState()
también dejaron de estar disponibles enFragmentController
. Si usasFragmentController
para alojar fragmentos fuera deFragmentActivity
, debes hacer queFragmentHostCallbacks
implementeSavedStateRegistryOwner
(Iba68e, b/188734238)
Correcciones de errores
- Se solucionó un problema por el que fallaba la llamada a
saveBackStack()
como parte de la compatibilidad con varias pilas de actividades cuando se realizaba al mismo tiempo que se ejecutabaFragmentTransaction
que usabareplace()
. (I73137) - Se corrigió
NullPointerException
, que ocurría después de restablecer, de forma manual, una pila de actividades guardada que contenía varias transacciones cuando se usaba la API derestoreBackStack()
para admitir varias pilas de actividades. De esta manera, también se solucionó un problema por el que no se verificabasetReorderingAllowed(true)
para todas las transacciones. (I8c593) - Se corrigió un problema por el que
FragmentManager
intentaba restablecer de manera incorrecta el estado de los fragmentos que se guardaba anteriormente, incluso después de que estos se quitaran deFragmentManager
, lo que provocaba que el estado guardado creciera continuamente con el paso del tiempo. (I1fb8e)
Versión 1.4.0-alpha03
16 de junio de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha03
, androidx.fragment:fragment-ktx:1.4.0-alpha03
y androidx.fragment:fragment-testing:1.4.0-alpha03
. La versión 1.4.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Todas las clases
Violation
de StrictMode de Fragment se actualizaron con mensajes de error más detallados que explican los detalles del incumplimiento. (b/187871638)FragmentTagUsageViolation
ahora contiene un mensaje de error más detallado, en el que se indica el contenedor principal es al que se le habría agregado el fragmento. (Ic33a7)WrongFragmentContainerViolation
ahora tiene un mensaje de error más detallado, que incluye el contenedor al que se estaba agregando el fragmento. (Ib55f8)- Las clases de caso de uso de
TargetFragmentUsageViolation
ahora tienen mensajes de error más detallados para incluir el fragmento que causa el incumplimiento y cualquier otra información contenida. (Icc6ac) - Las clases que extienden
RetainInstanceUsageViolation
ahora tienen mensajes de error más detallados, que incluyen el fragmento que causa el incumplimiento. (I6bd55) FragmentReuseViolation
ahora tiene un mensaje de error más detallado, que incluye el ID anterior del fragmento. (I28ce2)SetUserVisibleHintViolation
ahora tiene un mensaje de error más detallado, que incluye en qué se configuró la sugerencia visible para el usuario. (Ib2d5f)
Cambios en el comportamiento
- Se revirtió la restricción para llamar a
fitsSystemWindows
en unFragmentContainerView
; ya no se bloquea la app. (6b8ddd, b/190622202)
Correcciones de errores
- A partir de Fragment
1.3.5
: Se corrigió una regresión en las transiciones de elementos compartidos que se introdujo en Fragment1.3.4
mediante aosp/1679887. Los fragmentos ahora controlan correctamente los grupos de transición (ya sean establecidos directamente a través detransitionGroup="true"
, o bien indirectamente a través detransitionName
obackground
) y los elementos compartidos ya no arrojaránIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304) FragmentManager
ya no fallará cuando intentes ocultar un fragmento de eliminación. (I573dd, b/183634730)- La comprobación de lint
OnCreateDialogIncorrectCallback
ya no fallará cuando se evalúe una variable de nivel superior. (0a9efa, b/189967522)
Versión 1.4.0-alpha02
2 de junio de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha02
, androidx.fragment:fragment-ktx:1.4.0-alpha02
y androidx.fragment:fragment-testing:1.4.0-alpha02
. La versión 1.4.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
FragmentStrictMode
ahora siempre registrará incumplimientos del registro cuando este se habilite mediante el elementoFragmentManager
, independientemente de la política de modo estricto que se use. (I02df6, b/187872638)FragmentStrictMode
ahora admite la exención de determinadas clases deFragment
de los elementosViolation
del modo estricto, lo que permite que esa clase omita cualquier penalización. (Ib4e5d, b/184786736)Se expandió la clase
FragmentStrictMode
Violation
para agregar información de estructura basada en cada incumplimiento. Esto te permite verificar con exactitud la causa del incumplimiento junto con el fragmento infractor (If5118, b/187871150). CadaViolation
contiene lo siguiente:WrongFragmentContainerViolation
ahora contiene elViewGroup
al que se intentaba agregarFragment
. (I83c75, b/187871150)TargetFragmentUsageViolation
se amplió aSetTargetFragmentUsageViolation
,GetTargetFragmentUsageViolation
yGetTargetFragmentRequestCodeUsageViolation
, ySetTargetFragmentUsageViolation
contiene el fragmento de destino y el código de solicitud. (I741b4, b/187871150)SetUserVisibleHintViolation
ahora contiene el valor booleano que se pasa asetUserVisibleHint()
. (I00585, b/187871150)FragmentTagUsageViolation
ahora contiene el ViewGroup en el que la etiqueta<fragment>
intentaba aumentar un fragmento.(I5dbbc, b/187871150)FragmentReuseViolation
ahora contiene el ID único de la instancia anterior delFragment
que causa la infracción. (I0544d, b/187871150)RetainInstanceUsageViolation
ahora es abstracto y tiene dos subclases,SetRetainInstanceUsageViolation
yGetRetainInstanceUsageViolation
, que representan los dos casos del tipo de incumplimiento. (Ic81e5, b/187871150)
Cambios en el comportamiento
FragmentContainerView
ahora arroja una excepción cuando se intenta cambiar el atributofitsSystemWindow
de manera programática o a través de XML. Las vistas de cada fragmento individual deben controlar las inserciones. (Ie6651, b/187304502)
Versión 1.4.0-alpha01
18 de mayo de 2021
Lanzamiento de androidx.fragment:fragment:1.4.0-alpha01
, androidx.fragment:fragment-ktx:1.4.0-alpha01
y androidx.fragment:fragment-testing:1.4.0-alpha01
. La versión 1.4.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
Ahora,
FragmentContainerView
proporciona un métodogetFragment()
que muestra el fragmento que se agregó al contenedor más recientemente. Esta vista usa la misma lógica quefindFragmentById()
con el ID deFragmentContainerView
, pero permite encadenar la llamada. (Ife17a, b/162527857)val navController = binding.container.getFragment<NavHostFragment>().navController
Se agregó
FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE}
para especificar si se debe habilitar la animación de transición de Activity estándar tomada de tu tema en la transición de Fragments. (I46652)
Varias pilas de actividades
FragmentManager
mantiene una pila de actividades compuesta por transacciones de fragmentos que usaban addToBackStack()
. Esto te permite revertir esas transacciones y regresar al estado anterior con los mecanismos para guardar el estado con fragmentos a fin de que tus fragmentos puedan restablecer su estado correctamente.
En esta versión, se amplían estos mecanismos mediante dos API de FragmentManager
nuevas: saveBackStack(String name)
y restoreBackStack(String name)
. Estas APIs usan el mismo name
que addToBackStack()
para guardar el estado de FragmentTransaction
y el de cada fragmento que se agregó en esas transacciones. Además, te permiten restablecer más tarde esas transacciones y sus fragmentos con los estados intactos. Esto te permite "intercambiar" entre varias pilas de actividades guardando la actual y restableciendo una pila guardada.
saveBackStack()
funciona de manera similar a popBackStack()
por el hecho de que es asíncrona y que da como resultado la reversión del nombre de todas las transacciones de fragmentos a ese específico, además de destruir y quitar cualquier fragmento agregado. Sin embargo, tiene algunas diferencias:
saveBackStack()
es siempre inclusiva.- A diferencia de
popBackStack()
, que revertirá todas las transacciones de la pila de actividades si no se encuentra el nombre especificado en ella o si se proporciona un nombre nulo,saveBackStack()
no hace nada si no confirmas previamente una transacción de fragmento usandoaddToBackStack()
con ese nombre no nulo específico. - Se guarda el estado de todos los fragmentos agregados de esas transacciones. Esto significa que se almacena el estado de la vista de cada fragmento, se llama al
onSaveInstanceState()
de cada fragmento y se restablece ese estado, y se retiene cualquier instancia deViewModel
asociada con esos fragmentos (y no se llama aonCleared()
en ellos).
Las transacciones de fragmentos que se pueden usar con saveBackStack()
deben cumplir con estos criterios específicos:
- Toda transacción de fragmentos debe usar
setReorderingAllowed(true)
para garantizar que las transacciones se puedan restablecer como una única operación atómica. - El conjunto de transacciones guardadas debe ser independiente (es decir, estas no deben hacer referencia explícitamente a ningún fragmento fuera de ese conjunto) para garantizar que se puedan restablecer las transacciones en cualquier momento, sin importar los cambios que se hagan a la pila de actividades en el tiempo de intervención.
- Ningún fragmento guardado puede retenerse o tener un fragmento retenido en su conjunto de transición de fragmentos secundarios para garantizar que el
FragmentManager
no muestre ninguna referencia a fragmentos guardados después de que se guarde la pila de actividades.
De forma similar a saveBackStack()
, restoreBackStack()
no hace nada si no llamas a saveBackStack()
previamente con el mismo nombre. (b/80029773)
FragmentStrictMode
Las APIs de FragmentStrictMode
brindan comprobaciones de tiempo de ejecución que te permiten verificar que tu app o las bibliotecas de las que dependes no llamen a APIs de fragmentos que dejaron de estar disponibles. Cuando se detecta una infracción, puedes imprimir un mensaje de registro, activar tu propio objeto de escucha personalizado o cerrar la app. La FragmentStrictMode.Policy
que controla las comprobaciones que están habilitadas y las "sanciones" que se activan se puede configurar en un FragmentManager
a través del nuevo método setStrictModePolicy()
. Esa política se aplica a ese FragmentManager
y de forma transitiva a cualquier administrador de fragmentos secundario que no establezca su propia política única. (#123, #131, #150, b/143774122)
detectFragmentReuse()
detecta si una instancia deFragment
, que se había quitado, se está volviendo a agregar a unFragmentManager
. Nunca debes interactuar con una instancia deFragment
ni mantener una referencia a ella después de que se haya destruido y quitado de unFragmentManager
. (#142, b/153738653)detectFragmentTagUsage()
detecta cuándo usas la etiqueta<fragment>
en tu XML de diseño. Debes usarFragmentContainerView
siempre que aumentes fragmentos como parte de tu diseño. (#141, b/153738235)detectWrongFragmentContainer()
detecta cuándo agregas un fragmento a un contenedor que no sea unaFragmentContainerView
. Siempre debes usarFragmentContainerView
como el contenedor de fragmentos en tu diseño. (#146, b/181137036)detectRetainInstanceUsage()
detecta cuándo usas las APIs desetRetainInstance()
ogetRetainInstance()
, que dejaron de estar disponibles. (#140, b/153737954)detectSetUserVisibleHint()
detecta cuándo usas la APIsetUserVisibleHint()
que dejó de estar disponible. (#136, b/153738974)detectTargetFragmentUsage()
detecta cuándo usas las APIssetTargetFragment()
,getTargetFragment()
ogetTargetRequestCode()
, que dejaron de estar disponibles (#139, b/153737745)
Cambios en la API
- Se quitó la API experimental de
FragmentManager.enableNewStateManager(boolean)
, y ahora el nuevo administrador de estado es la única opción disponible. (I90036, b/162776418) FragmentScenario
ahora implementaCloseable
, lo que te permite usarlo con el métodouse
de Kotlin o con try-with-resources. (#121, b/143774122)
Nuevas comprobaciones de lint
- La comprobación de lint
UseGetLayoutInflater
ahora advierte cuando se usaLayoutInflater.from(Context)
en unDialogFragment
; siempre debes usar el métodogetLayoutInflater()
del fragmento de diálogo para obtener elLayoutInflater
adecuado. (#156, b/170781346) - La comprobación de lint
DialogFragmentCallbacksDetector
ahora advierte cuando se llama asetOnCancelListener
osetOnDismissListener
en el métodoonCreateDialog()
de unDialogFragment
; estos objetos de escucha son propiedad delDialogFragment
, por lo que debes anularonCancel()
yonDismiss()
para recibir estas devoluciones de llamada. (#171, b/181780047, b/187524311)
Correcciones de errores
- A partir de Fragment 1.3.4: Se corrigió una regresión introducida en Fragment
1.3.3
cuando se usa la API deViewTreeViewModelStoreOwner.get()
conViewModelProvider
o el método de Jetpack Compose deviewModel()
en un fragmento. Estos casos de uso ahora utilizan correctamente el elementoViewModelProvider.Factory
que proporciona tu fragmento si anulagetDefaultViewModelProviderFactory()
(como hacen los fragmentos@AndroidEntryPoint
anotados cuando usan Hilt). Si no anulas ese método, se creará como fábrica predeterminada unaSavedStateViewModelFactory
que guarda y restablece su estado junto con la vista del fragmento. (I5cbfa, b/186097368) - A partir de Fragment 1.3.4: Cuando se usa
FragmentContainerView
en la API 29, ya no se despacharán las inserciones de manera indefinida, por lo que se solucionan los problemas con las instanciasBottomNavigationBar
yFloatingActionButton
. (I1bb78, b/186012452) - A partir de Fragment 1.3.4: Ahora puedes recuperar tu elemento Parcelable del paquete de resultados de fragmentos después de la finalización del proceso. (I65932, b/187443158)
- A partir de Fragment 1.3.4: Cuando haces una transición de elementos compartidos en un ViewGroup, esta se llevará a cabo correctamente cuando ViewGroup tenga el elemento
transitionGroup
configurado como falso (I99675)
Contribución externa
- Agradecemos a simonschiller por hacer que
FragmentScenario
implementeCloseable
. (#121, b/143774122) - Agradecemos a simonschiller por haber agregado toda la API de
FragmentStrictMode
para esta versión. (#123, #131, #150, b/143774122, #142, b/153738653, #141, b/153738235, #146, b/181137036, #140, b/153737954, #136, b/153738974, #139, b/153737745) - Agradecemos a tatocaster por haber agregado la comprobación de lint
UseGetLayoutInflater
. (#156, b/170781346) - Agradecemos a tatocaster por haber agregado la comprobación de lint
DialogFragmentCallbacksDetector
. (#171, b/181780047)
Versión 1.3
Versión 1.3.6
21 de julio de 2021
Lanzamiento de androidx.fragment:fragment:1.3.6
, androidx.fragment:fragment-ktx:1.3.6
y androidx.fragment:fragment-testing:1.3.6
. La versión 1.3.6 contiene estas confirmaciones.
Correcciones de errores
- Desde Fragment
1.4.0-alpha03
:FragmentManager
ya no fallará cuando intentes ocultar un fragmento que lo quita. (I573dd, b/183634730) - La vista de Fragment ahora se configura correctamente en
GONE
cuando se usahide()
y la vista raíz tiene el valortransitionGroup=”true”
configurado. (aosp/1766655, b/193603427) FragmentActivity
ahora desbloquea el estado guardado como la primera operación en las devoluciones de llamada del ciclo de vida que anula. (I6db7a)
Actualización de dependencia
- A partir de Fragment
1.3.6
: Los fragmentos ahora dependen de Activity1.2.4
(I3a66c).
Versión 1.3.5
16 de junio de 2021
Lanzamiento de androidx.fragment:fragment:1.3.5
, androidx.fragment:fragment-ktx:1.3.5
y androidx.fragment:fragment-testing:1.3.5
. La versión 1.3.5 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una regresión en las transiciones de elementos compartidos que se introdujo en Fragment
1.3.4
mediante aosp/1679887. Los fragmentos ahora controlan correctamente los grupos de transición (ya sean establecidos directamente a través detransitionGroup="true"
, o bien indirectamente a través detransitionName
obackground
) y los elementos compartidos ya no arrojaránIndexOutOfBoundsException
. (I16484, b/188679569, b/188969304)
Versión 1.3.4
18 de mayo de 2021
Lanzamiento de androidx.fragment:fragment:1.3.4
, androidx.fragment:fragment-ktx:1.3.4
y androidx.fragment:fragment-testing:1.3.4
. La versión 1.3.4 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una regresión introducida en Fragment
1.3.3
cuando se utiliza la API deViewTreeViewModelStoreOwner.get()
conViewModelProvider
o el método de Jetpack Compose deviewModel()
en un fragmento cuando se usa Hilt. Estos casos de uso ahora utilizan correctamente el elementoViewModelProvider.Factory
que proporciona tu fragmento si anulagetDefaultViewModelProviderFactory()
(como hacen los fragmentos@AndroidEntryPoint
anotados). Si no anulas ese método, se creará como fábrica predeterminada unaSavedStateViewModelFactory
que guarda y restablece su estado junto con la vista del fragmento. (I5cbfa, b/186097368) - Cuando se usa
FragmentContainerView
en la API 29, ya no se despacharán las inserciones de manera indefinida, por lo que se solucionan los problemas con las instanciasBottomNavigationBar
yFloatingActionButton
. (I1bb78, b/186012452) - Ahora puedes recuperar tu elemento Parcelable del paquete de resultados de fragmentos después de la finalización del proceso. (I65932, b/187443158)
- Cuando haces una transición de elementos compartidos en un ViewGroup, esta se llevará a cabo correctamente cuando ViewGroup tenga el elemento
transitionGroup
configurado como falso. (I99675)
Versión 1.3.3
21 de abril de 2021
Lanzamiento de androidx.fragment:fragment:1.3.3
, androidx.fragment:fragment-ktx:1.3.3
y androidx.fragment:fragment-testing:1.3.3
. La versión 1.3.3 contiene estas confirmaciones.
Nuevas funciones
- Ahora, usar
SavedStateViewModelFactory
funciona cuando se utiliza conSavedStateRegistryOwner
, que se muestra medianteViewTreeSavedStateRegistryOwner.get()
con la View de Fragment. (I21acf, b/181577191)
Correcciones de errores
- Se corrigió una regresión introducida en Fragment
1.3.2
que causaba que las animacionespopEnter
no se ejecutaran cuando se mostraba un elementoFragmentTransaction
que incluía una operaciónsetPrimaryNavFragment
, como las que usabaNavHostFragment
. (I38c87, b/183877426) - Ahora,
FragmentContainerView
garantiza que cadaFragment
reciba un conjunto nuevo deWindowInsets
, lo que asegura que cada fragmento ahora pueda consumir, de forma independiente, las inserciones. (I63f68, b/172153900) - Ahora,
DialogFragment
procesa, de manera correcta, los casos en los que se agrega un fragmento secundario a un contenedor que tiene el mismo ID que un contenedor de tu claseDialog
personalizada, lo que corrige problemas de jerarquía de vistas cuando se vuelven a utilizar ID que los diálogos ya usaron de manera interna, comoBottomSheetDialog
. (Ie6279, b/180021387) - Ahora,
FragmentManager.dump()
aplica sangría, de manera correcta, en el primer fragmento de la lista de fragmentos activos. (If5c33, b/183705451)
Nuevas correcciones de errores del administrador de estados
- Ahora, el nuevo administrador de estado del fragmento controla, de manera correcta, las transiciones de salida con operaciones hide. (I9e4de, b/184830265)
Versión 1.3.2
24 de marzo de 2021
Lanzamiento de androidx.fragment:fragment:1.3.2
, androidx.fragment:fragment-ktx:1.3.2
y androidx.fragment:fragment-testing:1.3.2
. La versión 1.3.2 contiene estas confirmaciones.
Nuevas correcciones de errores del administrador de estados
- Cuando se ejecutan las operaciones
popBackStack()
ycommit()
juntas, la última operación ahora establecerá la dirección para todas las animaciones en lugar de ejecutar algunas animaciones emergentes y algunas animaciones de entrada. (I7072e, b/181142246) - A las vistas dentro de la jerarquía de los elementos compartidos ya no se les borrará el nombre de la transición cuando se realiza una transición de elementos compartidos. (I4d4a6, b/179934757)
Actualizaciones de dependencias
- Fragment ahora depende de la Activity versión 1.2.2, lo que corrige un problema con la comprobación de lint de
InvalidFragmentVersionForActivityResult
de Activity cuando se usa Fragment versión 1.3.1 o posteriores. - Fragment ahora depende de Lifecycle versión 2.3.1.
Versión 1.3.1
10 de marzo de 2021
Lanzamiento de androidx.fragment:fragment:1.3.1
, androidx.fragment:fragment-ktx:1.3.1
y androidx.fragment:fragment-testing:1.3.1
. La versión 1.3.1 contiene estas confirmaciones.
Nuevas funciones
- Los diálogos dentro de un
DialogFragment
ahora pueden obtener acceso a los propietarios de ViewTree mediante su DecorView, lo que garantiza queDialogFragment
se puede usar conComposeView
. (Ib9290, b/180691023)
Correcciones de errores
- Los fragmentos aumentados en una actividad
RESUMED
que ya usaba FragmentContainerView ahora se muestran correctamente después de un cambio de configuración. (Ie14c8, b/180538371) - Ya no hay un
}
adicional al final del fragmentotoString()
. (I54705, b/177761088) - Los métodos anulados en FragmentActivity ahora heredan correctamente el método base javaDoc. (I736ce, b/139548782)
- Los documentos de
setFragmentResult
y desetFragmentResultListener
actualizaron los documentos de parámetros a fin de reflejar que ya no aceptan valores nulos. (I990ba, (b/178348386))
Nuevas correcciones de errores del administrador de estados
- Se corrigió una fuga de memoria en fragmentos causada por
mFocusedView
. (IB4e9e, b/179925887) - Los fragmentos ahora llaman de manera correcta a
onCreateOptionsMenu
cuando se usan las transacciones mostrar/ocultar. (I8bce8, b/180255554) - Los fragmentos secundarios con transiciones que comienzan antes de que el fragmento se separe ahora llegarán correctamente a
RESUMED
. (Ic11e6, b/180825150). - Los fragmentos aumentados que usan la etiqueta
<fragment>
ahora siempre lo harán enRESUMED
. (I452ac, (I9fa49)
Actualizaciones de dependencias
- El fragmento 1.3.1 depende de la actividad
1.2.1
. (I557b9)
Versión 1.3.0
10 de febrero de 2021
Lanzamiento de androidx.fragment:fragment:1.3.0
, androidx.fragment:fragment-ktx:1.3.0
y androidx.fragment:fragment-testing:1.3.0
. La versión 1.3.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.2.0
- Nuevo administrador de estado: Una reescritura importante de objetos internos de
FragmentManager
corrigió numerosos problemas que afectaban el envío de eventos de ciclos de vida, animaciones y transiciones. Además, corrigió la manera en la que se manejaban los fragmentos pospuestos. Integración de la API de Activity Result: Se agregó compatibilidad para la API de
ActivityResultRegistry
que se introdujo en Activity1.2.0
a fin de controlarstartActivityForResult()
+onActivityResult()
, así como flujosrequestPermissions()
+onRequestPermissionsResult()
sin anular métodos en tu Fragment, además de proporcionar hooks para probarlos. Consulta la información actualizada en Cómo obtener un resultado de una actividad.- Esta versión corrige una serie de problemas relacionados con códigos de solicitud no válidos y el despacho de solicitudes de permisos que evitan que la API de Activity Result funcione en versiones anteriores de
FragmentActivity
. Debes actualizar a Fragment 1.3.0 para usar las API de Activity Result enFragmentActivity
oAppCompatActivity
.
- Esta versión corrige una serie de problemas relacionados con códigos de solicitud no válidos y el despacho de solicitudes de permisos que evitan que la API de Activity Result funcione en versiones anteriores de
API de Fragment Result: Se agregó compatibilidad para pasar resultados entre dos fragmentos a través de nuevas API en
FragmentManager
. Esta opción funciona para fragmentos de jerarquía (superior/secundario), DialogFragments y fragmentos en Navigation, y garantiza que los resultados solo se envíen a tu Fragment cuando sea al menosSTARTED
. Las APIs de fragmentos de destino dejaron de estar disponibles y se reemplazaron por estas nuevas APIs. Consulta Cómo obtener resultados con la API de Fragment Result.FragmentOnAttachListener
: Dejó de estar disponible la devolución de llamada deonAttachFragment()
enFragmentActivity
yFragment
. Se agregó unFragmentOnAttachListener
nuevo para brindar una alternativa más flexible, que permite la delegación deonAttachFragment()
a objetos de escucha separados que pueden probarse, además de admitir que se agregue un objeto de escucha a FragmentManagers distinto de tu FragmentManager secundario directo.Mejoras de
FragmentScenario
: La claseFragmentScenario
del artefactofragment-testing
se volvió a escribir en Kotlin y recibió varias mejoras:- El elemento
FragmentScenario
ahora usa el objetosetMaxLifecycle()
para implementar el parámetromoveToState()
, lo que garantiza un comportamiento coherente en todos los niveles de API y separa el estado de Fragment del elemento Activity subyacente. - El objeto
FragmentScenario
ahora admite la configuración de un elementoLifecycle.State
inicial para admitir la declaración del estado del fragmento antes de moverlo a cadaLifecycle.State
por primera vez. - Ahora hay una alternativa a la API de
FragmentScenario
del objetoonFragment
en forma del métodowithFragment
de extensión reificada de Kotlin que te permite mostrar un valor. Cabe destacar que vuelve a mostrar las excepciones generadas en el bloque especificado.
- El elemento
Compatibilidad con
ViewTree
:Fragment
ahora admite las API deViewTreeLifecycleOwner.get(View)
ViewTreeViewModelStoreOwner.get(View)
yViewTreeSavedStateRegistryOwner
que se agregaron en Lifecycle2.3.0
y SavedState1.1.0
, de manera que se mostrará Fragment comoViewModelStoreOwner
, y aSavedStateRegistryOwner
yLifecycleOwner
vinculado al Lifecycle de vista de los fragmentos cuando se usaView
dentro deFragment
.Cambios en la animación de
TRANSIT_
: Los efectos predeterminados de los fragmentos,TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
yTRANSIT_FRAGMENT_FADE
, ahora usanAnimator
en lugar deAnimation
. Los recursos utilizados para compilar estos animadores ahora son privados.Baja de
setRetainInstance()
: Dejó de estar disponible el métodosetRetainInstance()
de Fragment. Con la introducción de ViewModels, los desarrolladores tienen una API específica para un estado de retención que se puede asociar con gráficos de Activity, Fragment y Navigation. De esta manera, los desarrolladores pueden usar un Fragment normal sin retención y mantener el estado específico que quieren retener por separado a fin de evitar una fuente común de fugas y, al mismo tiempo, mantener las propiedades útiles de una sola creación y destrucción del estado de retención (es decir, el constructor deViewModel
y la devolución de llamada deonCleared()
que recibe).Baja del adaptador ViewPager 1: Con la actualización de ViewPager2
1.0.0
, dejaron de estar disponibles las clasesFragmentPagerAdapter
yFragmentStatePagerAdapter
para interactuar conViewPager
. Consulta Cómo migrar de ViewPager a ViewPager2.
Versión 1.3.0-rc02
27 de enero de 2021
Lanzamiento de androidx.fragment:fragment:1.3.0-rc02
, androidx.fragment:fragment-ktx:1.3.0-rc02
y androidx.fragment:fragment-testing:1.3.0-rc02
. La versión 1.3.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema en el que aparecía un
DialogFragment
superior por encima de unDialogFragment
secundario después de un cambio de configuración. Los fragmentos de diálogo secundarios ahora aparecen siempre encima de un fragmento de diálogo superior. (I30806, b/177439520) - Se corrigió un problema en el que cuando se hacía una operación
hide
con unAnimation
causaba que el fragmento oculto se actualizara al final de la animación. (I57e22, b/175417675) - Ahora, los fragmentos con transiciones agregadas antes de que la jerarquía de vistas se adjunte llegan de manera correcta a
RESUMED
. (I1fc1d, b/177154873)
Nuevas correcciones de errores del administrador de estados
- Ahora, la vista
Lifecycle
del fragmento procesa correctamente los casos en los que la vista del fragmento se destruye antes de queLifecycle
llegue aCREATED
, lo que evita excepciones que indican "no event down from INITIALIZED". (eda2bd, b/176138645). - Los fragmentos que usan
Animator
ahora aparecen en el orden adecuado cuando se usaFragmentContainerView
. (Id9aa3, b/176089197)
Versión 1.3.0-rc01
16 de diciembre de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-rc01
, androidx.fragment:fragment-ktx:1.3.0-rc01
y androidx.fragment:fragment-testing:1.3.0-rc01
. La versión 1.3.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Ahora
onPrepareOptionsMenu()
sigue la misma lógica queonCreateOptionsMenu()
y ya no se llama cuando un fragmento superior llama asetMenuVisibility(false)
. (Id7de8, b/173203654)
Nuevas correcciones de errores del administrador de estados
- Se corrigió una filtración y un artefacto visual cuando se agrega un fragmento con un elemento
Animation
a unaFragmentContainerView
y, luego, se interrumpe esa adición con una operación emergente. (I952d8) - Se corrigió un problema en el que la vista del fragmento permanecía en la jerarquía de vistas si se la reemplazaba durante sus métodos
onCreate()
oonViewCreated()
. (I8a7d5) - Ahora el foco se restaura correctamente en las vistas raíz de Fragment cuando se reanudan. (Ifc84b)
- Ahora si se combinan las operaciones de objeto emergente y de reemplazo en la misma transacción de fragmentos, se mostrarán las animaciones adecuadas. (Ifd4e4, b/170328691)
Versión 1.3.0-beta02
2 de diciembre de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-beta02
, androidx.fragment:fragment-ktx:1.3.0-beta02
y androidx.fragment:fragment-testing:1.3.0-beta02
. La versión 1.3.0-beta02 contiene estas confirmaciones.
Nuevas funciones
FragmentScenario
se convirtió por completo al lenguaje de Kotlin y, al mismo tiempo, mantiene la compatibilidad con la fuente y el objeto binario con las interfaces funcionales de Kotlin 1.4 paraFragmentAction
(I19d31)
Cambios en el comportamiento
- Ahora, las vistas FragmentContainerView que no aumentan un fragmento con el atributo
class
oandroid:name
se pueden usar fuera de unaFragmentActivity
. (Id4397, b/172266337) - Ahora, si se intenta establecer el ciclo de vida máximo de un fragmento en
DESTROYED
, se arrojará una excepciónIllegalArgumentException
. (Ie7651, b/170765622) - Ahora, si inicializas un FragmentScenario con un estado
DESTROYED
, se arrojará una excepciónIllegalArgumentException
. (I73590, b/170765622)
Nuevas correcciones de errores del administrador de estados
- Se solucionó un problema en el que la vista no alcanzaba su estado final si se interrumpía una transición de fragmento que usaba un
Animator
o una de las opciones deTRANSIT_FRAGMENT_
. (I92426, b/169874632) - Se solucionó un problema que impedía que los fragmentos con una
Animation
de salida se destruyeran correctamente. (I83d65) - Los fragmentos de salida que tienen sus efectos revertidos ahora ejecutan las acciones de cancelar y reiniciar de forma correcta con el efecto de entrada correspondiente. (I62226, b/167092035)
- Se corrigió un problema en el que no se ejecutaba el objeto
Animator
de salida de un elementohide()
. (Id7ffe) - Los fragmentos ahora aparecen correctamente cuando se posponen y, luego, se inician inmediatamente. (Ie713b, b/170022857)
- Los fragmentos que quitan su vista enfocada durante una animación ya no intentarán restaurar el enfoque de la vista separada una vez que alcancen el elemento
RESUMED
. (I38c65, b/172925703)
Contribución externa
FragmentFactory
ahora almacena en caché las clases de fragmentos por separado para diferentes instancias deClassLoader
. ¡Gracias, Simon Schiller! (#87, b/113886460)
Versión 1.3.0-beta01
1 de octubre de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-beta01
, androidx.fragment:fragment-ktx:1.3.0-beta01
y androidx.fragment:fragment-testing:1.3.0-beta01
. La versión 1.3.0-beta01 contiene estas confirmaciones.
Nuevas funciones
setMaxLifecycle()
ahora admite la configuración del estadoLifecycle
enINITIALIZING
, siempre que el fragmento no se haya movido aCREATED
. (b/159662173)
Cambios en la API
- Actualiza AndroidX para usar Kotlin 1.4. (Id6471, b/165307851, b/165300826)
Cambios en el comportamiento
- Los archivos de recursos de Fragment se establecieron correctamente como privados. (aosp/1425237)
Correcciones de errores
- Los fragmentos aumentados que usan la etiqueta
<fragment>
ahora esperarán correctamente hasta que las vistas se agreguen a un contenedor antes de pasar a STARTED. (I02f4c) - Los fragmentos que son visibles y, luego, establecen
setMaxLifecycle()
enCREATED
, ahora ejecutan correctamente sus efectos de salida. (b/165822335) - Quitar un fragmento desconectado que no se haya agregado a la pila de actividades ya no produce una fuga de memoria. Cortesía de Nicklas Ansman Giertz. (b/166489383)
- Ahora, los fragmentos activos siempre tendrán un
FragmentManager
no nulo y los fragmentos con unFragmentManager
no nulo siempre se considerarán activos. (aosp/1422346) - Los efectos predeterminados de los fragmentos
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
yTRANSIT_FRAGMENT_FADE
ahora usanAnimator
, en lugar deAnimation
. (b/166155034)
Nuevas correcciones de errores del administrador de estados
- Los fragmentos ahora restablecen correctamente el estado del enfoque antes de comenzar la animación. (Icc256)
- Los fragmentos que solo tienen una transición de elementos compartidos ahora completan de forma correcta sus efectos especiales, lo que significa que realmente pasan a su estado final. (Iaebc7, b/166658128)
- Las vistas de fragmento ahora se quitan del contenedor antes de que se destruyan. (Id5876)
- El nuevo administrador de estado ahora quita de manera coherente la vista de fragmento saliente antes de agregar el que está ingresando. (I41a6e)
- El nuevo administrador de estado ahora respeta los cambios explícitos en la visibilidad de una vista de fragmento. Esto significa que si configuras la vista de un fragmento que está ingresando en
INVISIBLE
antes de que comience la animación, esta permanecerá invisible. (b/164481490) - Los fragmentos ahora priorizan
Animators
por sobreAnimations
, lo que significa que un fragmento con ambos solo ejecutaráAnimator
e ignoraráAnimation
. (b/167579557) - El nuevo administrador de estado ya no hace que los fragmentos parpadeen cuando se ingresan animaciones. (b/163084315)
Problema conocido
Cuando se usa el nuevo administrador de estado, si se presiona Atrás mientras se ingresa un efecto especial en lugar de regresar al fragmento anterior, el fragmento anterior nunca se vuelve a agregar, lo que da como resultado una pantalla en blanco. (b/167259187, b/167092035, b/168442830)
Versión 1.3.0-alpha08
19 de agosto de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha08
, androidx.fragment:fragment-ktx:1.3.0-alpha08
y androidx.fragment:fragment-testing:1.3.0-alpha08
. La versión 1.3.0-alpha08 contiene estas confirmaciones.
Nuevo administrador de estado
En esta versión, se incluye una refactorización relevante de la administración interna de estados de FragmentManager
, que afecta el envío de animaciones, transiciones y métodos de ciclo de vida, así como la manera en que se controlan las transacciones pospuestas. Esta opción está habilitada de forma predeterminada. Para obtener más detalles, consulta la entrada de blog Fragments: Rebuilding the Internals. (b/139536619, b/147749580)
- Se puede usar una API experimental en
FragmentManager.enableNewStateManager(boolean)
a fin de controlar si FragmentManager usa el nuevo administrador de estado. (I7b6ee)
Los siguientes problemas solo se corrigen cuando se usa el nuevo administrador de estado:
- El fragmento anterior de una operación
replace
ahora se detiene correctamente antes de que se inicie el fragmento nuevo. (b/161654580) - Fragments ahora impide que varias animaciones compitan en los mismos fragmentos, lo cual evita casos en los que un
Animation
anule todos los efectos deTransition
o aquellos en los que unAnimator
y unTransition
en un fragmento individual se ejecuten a la vez. (b/149569323) - Ahora se ejecutan los elementos
enterTransition
yexitTranstion
de todos los fragmentos que entran y salen, en lugar de que se ejecuten solo el último fragmento en entrar y el primero en salir. (b/149344150) - Los fragmentos pospuestos ya no se atascan en el estado
CREATED
, sino que pasan aSTARTED
con otros fragmentos. (b/129035555) - Se corrigió un problema por el que
FragmentManager
ejecutaba operaciones de manera desordenada cuando combinaba una transacción reordenada y otra no ordenada. (b/147297731) - Mostrar varios fragmentos de forma simultánea ya no hará que se muestren temporalmente los fragmentos intermedios cuando se pospongan fragmentos. (b/37140383)
FragmentManager
ahora muestra los fragmentos correctos cuando se llama afindFragmentById()
ofindFragmentByTag()
desde la devolución de llamadaonAttachFragment()
. (b/153082833)- Fragments ya no llama a
onCreateView()
en los fragmentos que se destruirán cuando el que los reemplace se posponga. (b/143915710) - El mensaje de error cuando se intenta combinar las instancias
Transition
de framework y lasTransition
de AndroidX ahora menciona el fragmento y la transición no válida. (b/155574969)
Cambios en el comportamiento
- Ahora puedes llamar a
launch()
en un objetoActivityResultLauncher
, en el método de ciclo de vida deonCreate()
de un fragmento. (b/161464278) - La llamada a
registerForActivityResult()
después deonCreate()
ahora genera una excepción que indica que esto no está permitido en lugar de omitir en forma silenciosa la entrega de resultados tras un cambio de configuración (b/162255449) FragmentActivity
ahora usa la APIOnContextAvailableListener
presentada en Activity1.2.0-alpha08
para restablecer el estado deFragmentManager
. Los objetos de escucha agregados a las subclases deFragmentActivity
se ejecutarán después de este objeto de escucha. (I513da)
Correcciones de errores
- Ahora se pasa
ActivityOptions
cuando se usastartIntentSenderForResult()
. (b/162247961)
Problema conocido
- Cuando se usa el nuevo administrador de estado, configurar directamente la visibilidad de la vista raíz del fragmento después de
onViewCreated()
y antes deonResume()
ocasiona queFragmentManager
anule la visibilidad que configuraste, ya que este controla la visibilidad de la vista raíz. Como solución alternativa, siempre deberías usar las operacioneshide()
yshow()
para cambiar la visibilidad de tu fragmento. (b/164481490)
Versión 1.3.0-alpha07
22 de julio de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha07
, androidx.fragment:fragment-ktx:1.3.0-alpha07
y androidx.fragment:fragment-testing:1.3.0-alpha07
. La versión 1.3.0-alpha07 contiene estas confirmaciones.
Nuevas funciones
- El objeto
FragmentScenario
ahora admite la configuración de un estado inicial Lifecycle deCREATED
,STARTED
oRESUMED
, en lugar de trasladar siempre el elemento Fragment al estadoRESUMED
. (b/159662750) - Se agregó una alternativa a la API de
FragmentScenario
del objetoonFragment
en forma del métodowithFragment
de extensión reificada de Kotlin que te permite mostrar un valor. Cabe destacar que vuelve a mostrar las excepciones generadas en el bloque especificado. (b/158697631)
Cambios en el comportamiento
- El elemento
FragmentScenario
ahora usa el objetosetMaxLifecycle()
para implementar el parámetromoveToState()
, lo que garantiza un comportamiento coherente en todos los niveles de API y separa el estado de Fragment del elemento Activity subyacente. (b/156527405) - El elemento
SavedStateRegistryOwner
que muestra el objetoViewTreeSavedStateRegistryOwner
ahora está vinculado al parámetro Lifecycle de la vista de fragmento, lo que garantiza que tenga su estado guardado y que se restablezca al mismo tiempo que la vista de fragmento. (b/158503763)
Correcciones de errores
- Los fragmentos ahora esperan a que se adjunte la vista de fragmento antes de llamar al objeto
ViewCompat.requestApplyInsets()
, lo que evita casos en los que se descarta la solicitud de inserción (b/158095749) - Llamar al objeto
clearFragmentResultListener
ahora borra correctamente el observador del ciclo de vida. (b/159274993)
Versión 1.3.0-alpha06
10 de junio de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha06
, androidx.fragment:fragment-ktx:1.3.0-alpha06
y androidx.fragment:fragment-testing:1.3.0-alpha06
. La versión 1.3.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- La devolución de llamada
onAttachFragment()
enFragmentActivity
yFragment
dejó de estar disponible. Se agregó unFragmentOnAttachListener
nuevo para brindar una alternativa más flexible, que permite la delegación deonAttachFragment()
a objetos de escucha separados que pueden probarse, además de admitir que se agregue un objeto de escucha a FragmentManagers distinto de tu FragmentManager secundario directo. (I06d3d)
Correcciones de errores
- Los fragmentos superiores ahora tienen su estado de la vista restablecido antes que los fragmentos secundarios, lo que corrige un problema de orden visual luego de un cambio de configuración cuando un
DialogFragment
mostraba otroDialogFragment
como fragmento secundario. (b/157195715) - Se corrigió un problema en el que la comprobación de lint
UseRequireInsteadOfGet
no controlaba correctamente los usos encadenados de los operadores?.
y!!
. (b/157677616)
Versión 1.3.0-alpha05
20 de mayo de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha05
, androidx.fragment:fragment-ktx:1.3.0-alpha05
y androidx.fragment:fragment-testing:1.3.0-alpha05
. La versión 1.3.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad para el objeto
ViewTreeViewModelStoreOwner
del elemento Lifecycle2.3.0-alpha03
y para el objetoViewTreeSavedStateRegistryOwner
del elemento SavedState1.1.0-alpha01
cuando se usa un objetoView
dentro de un elementoFragment
. (aosp/1297993, aosp/1300264)
Cambios en la API
- Las API de
setFragmentResult()
ysetFragmentResultListener()
ahora toman un valor no nulo deBundle
yFragmentResultListener
, respectivamente. Para borrar de forma explícita un objeto de escucha o un resultado establecido previamente, usa los nuevos métodosclearFragmentResult()
yclearFragmentResultListener()
. (b/155416778) - Las extensiones de Kotlin
setFragmentResultListener()
que toman un valor lambda ahora están identificadas comoinline
. (b/155323404)
Cambios en el comportamiento
- Los objetos
startActivityForResult()
,startIntentSenderForResult()
yrequestPermissions
que habían dejado de estar disponibles enFragment
ahora usanActivityResultRegistry
de forma interna, lo que quita la restricción sobre el uso de los bits inferiores (inferiores a0xFFFF
) en tus códigos de solicitud cuando se usan esas API. (b/155518741)
Actualizaciones de la documentación
- Se amplió la documentación en los constructores
Fragment(@LayoutRes int)
yDialogFragment(@LayoutRes int)
para aclarar que deben llamarse desde el constructor sin argumentos de tus subclases cuando se usa elFragmentFactory
predeterminado. (b/153042497)
Versión 1.3.0-alpha04
29 de abril de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha04
, androidx.fragment:fragment-ktx:1.3.0-alpha04
y androidx.fragment:fragment-testing:1.3.0-alpha04
. La versión 1.3.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad para pasar resultados entre dos fragmentos a través de nuevas APIs en
FragmentManager
. Esta opción funciona para fragmentos de jerarquía (superior/secundario), DialogFragments y fragmentos en Navigation, y garantiza que los resultados solo se envíen a tu Fragment cuando sea al menosSTARTED
. (b/149787344)
Cambios en la API
- Las API del fragmento de destino dejaron de estar disponibles. Para pasar datos entre fragmentos, se deben usar las nuevas API de resultados de fragmentos. (b/149787344)
- Las API
startActivityForResult()
/onActivityResult()
yrequestPermissions()
/onRequestPermissionsResult()
en Fragment dejaron de estar disponibles. Usa las API de resultados de actividad. (aosp/1290887) - Cambio rotundo de Activity
1.2.0-alpha04
: se cambió el nombre del métodoprepareCall()
aregisterForActivityResult()
. (aosp/1278717)
Correcciones de errores
- El
getViewLifecycleOwner()
del fragmento ahora se detiene antes de llamar aonSaveInstanceState()
, lo que refleja el comportamiento del ciclo de vida del fragmento. (b/154645875) - Llamar a
setMenuVisibility(false)
en un fragmento ahora cambia correctamente la visibilidad de los menús que proporcionan sus fragmentos secundarios. (b/153593580) - Se corrigió un
illegalStateException
cuando se agrega un fragmento a la jerarquía de vistas deDialogFragment
conFragmentContainerView
. (b/154366601) - El método
getDefaultViewModelProviderFactory()
de los fragmentos ya no falla cuando tus fragmentos se alojan fuera de una actividad. (b/153762914)
Versión 1.3.0-alpha03
1 de abril de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha03
, androidx.fragment:fragment-ktx:1.3.0-alpha03
y androidx.fragment:fragment-testing:1.3.0-alpha03
. La versión 1.3.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Los métodos
prepareCall
deFragment
ahora sonfinal
. (b/152439361)
Correcciones de errores
- Se corrigió una regresión que se introdujo en Fragment
1.3.0-alpha02
cuando se usabaBottomSheetDialogFragment
. (b/151652127, aosp/1263328, aosp/1265163) - Se corrigió una falla que se producía cuando se usaba
prepareCall
desde un fragmento después de un cambio de configuración. (b/152137004) - Se corrigió un problema por el que se ignoraban las transiciones de salida y los elementos compartidos cuando se usaba
setTargetFragment()
. (b/152023196) - A partir de Fragment
1.2.4
: se actualizaron las reglas de ProGuard de Fragment para permitir la ofuscación de los fragmentos que se conservaron. (b/151605338) - A partir de Fragment
1.2.4
: Se inhabilitó la regla de lint deFragmentLiveDataObserve
en las clasesDialogFragment
, ya que su ciclo de vida y el ciclo de vida de sus vistas siempre están sincronizados, lo que hace que sea más seguro usarthis
oviewLifecycleOwner
para las llamadas aobserve
(b/151765086)
Cambios de dependencia
- Los fragmentos dependen de Activity
1.2.0-alpha03
, que tuvo mejoras significativas en la API de Activity Result que se introdujo en Activity1.2.0-alpha02
.
Versión 1.3.0-alpha02
18 de marzo de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha02
, androidx.fragment:fragment-ktx:1.3.0-alpha02
y androidx.fragment:fragment-testing:1.3.0-alpha02
. La versión 1.3.0-alpha02 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad para la API de
ActivityResultRegistry
que se introdujo en Activity1.2.0-alpha02
para controlar los flujosstartActivityForResult()
+onActivityResult()
yrequestPermissions()
+onRequestPermissionsResult()
sin anular métodos en Fragment. Además, se proporcionan hooks para probar estos flujos. Consulta la información actualizada en Cómo obtener un resultado de una actividad. (b/125158199)
Cambios en la API
DialogFragment
ahora proporciona un constructor que toma un@LayoutRes
que, a su vez, indica el diseño queonCreateView()
debería aumentar de forma predeterminada. (b/150327080)- El método
onActivityCreated()
dejó de estar disponible. El código que toca la vista del fragmento se debe crear enonViewCreated()
(al que se llama inmediatamente antes deonActivityCreated()
), mientras que el resto del código de inicialización debe estar enonCreate()
. Para recibir una devolución de llamada específicamente cuando elonCreate()
de la actividad está completo, se debe registrar unLifeCycleObserver
en elLifecycle
de la actividad enonAttach()
, y se lo debe quitar una vez que se reciba la devolución de llamada deonCreate()
. (b/144309266)
Correcciones de errores
- A partir de Fragment
1.2.3
: se corrigió un error deDialogFragment
que ocasionaba unStackOverflowError
cuando se llamaba agetLayoutInflater()
desdeonCreateDialog()
. (b/117894767, aosp/1258664) - A partir de Fragment
1.2.3
: Se redujo el alcance de las reglas de ProGuard incluidas de Fragment para garantizar que se puedan quitar las clases de Fragment sin utilizar. (b/149665169) - A partir de Fragment
1.2.3
: Se corrigieron los falsos positivos en la comprobación de lint deUseRequireInsteadOfGet
cuando se utilizaba un nombre de variable local que reemplazaba el nombre de propiedad de Kotlin (b/149891163). - A partir de Fragment
1.2.3
:FragmentContainerView
ya no arroja unUnsupportedOperationException
por usar el constructor incorrecto en la vista previa de diseño. (b/149707833)
Errores conocidos
BottomSheetDialogFragment
ya no posiciona correctamente su diálogo en la pantalla. (b/151652127)
Versión 1.3.0-alpha01
4 de marzo de 2020
Lanzamiento de androidx.fragment:fragment:1.3.0-alpha01
, androidx.fragment:fragment-ktx:1.3.0-alpha01
y androidx.fragment:fragment-testing:1.3.0-alpha01
. La versión 1.3.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad con la API de
ViewTreeLifecycleOwner.get(View)
en Lifecycle2.3.0-alpha01
, de manera que mostrará elviewLifecycleOwner
de Fragment como elLifecycleOwner
para cualquier View que muestreonCreateView()
. (aosp/1182955)
Cambios en la API
- El método
setRetainInstance()
de Fragment dejó de estar disponible. Con la introducción de ViewModels, los desarrolladores tienen una API específica para un estado de retención que se puede asociar con gráficos de Activity, Fragment y Navigation. De esta manera, los desarrolladores pueden usar un Fragment normal sin retención y mantener el estado específico que quieren retener por separado a fin de evitar una fuente común de fugas y, al mismo tiempo, mantener las propiedades útiles de una sola creación y destrucción del estado de retención (es decir, el constructor deViewModel
y la devolución de llamada deonCleared()
que recibe). (b/143911815) - Con el lanzamiento de ViewPager2
1.0.0
, las clasesFragmentPagerAdapter
yFragmentStatePagerAdapter
para interactuar conViewPager
dejaron de estar disponibles. Consulta Cómo migrar de ViewPager a ViewPager2. (b/145132715)
Correcciones de errores
- Las reglas de ProGuard de Fragment ahora solo mantienen las clases
Fragment
de constructores predeterminadas que están en uso, en lugar de todas las instancias deFragment
. De esta manera, se corrige una regresión que se introdujo en Fragment1.2.1
. (b/149665169 - Las reglas de lint de
require___()
que se agregaron en Fragment1.2.2
ya no muestran valores falsos positivos en las variables locales que comparten el mismo nombre que las propiedades de Kotlin reemplazadas (es decir,view
). (b/149891163) FragmentContainerView
ya no arroja unaUnsupportedOperationException
cuando se usa la vista previa de diseño en Android Studio. (b/149707833)- Se corrigió un error por el que los fragmentos retenidos que se agregaban después de que se guardaba un estado no se recreaban continuamente ni se destruían después de un cambio de configuración. (b/145832397)
Versión 1.2.5
Versión 1.2.5
10 de junio de 2020
Lanzamiento de androidx.fragment:fragment:1.2.5
, androidx.fragment:fragment-ktx:1.2.5
y androidx.fragment:fragment-testing:1.2.5
. La versión 1.2.5 contiene estas confirmaciones.
Correcciones de errores
- El
getViewLifecycleOwner()
del fragmento ahora se detiene antes de llamar aonSaveInstanceState()
, lo que refleja el comportamiento del ciclo de vida del fragmento. Anteriormente, se lanzó en Fragment1.3.0-alpha04
. (b/154645875) - Llamar a
setMenuVisibility(false)
en un fragmento ahora cambia correctamente la visibilidad de los menús que proporcionan sus fragmentos secundarios. Anteriormente, se lanzó en Fragment1.3.0-alpha04
. (b/153593580)
Versión 1.2.4
Versión 1.2.4
1 de abril de 2020
Lanzamiento de androidx.fragment:fragment:1.2.4
, androidx.fragment:fragment-ktx:1.2.4
y androidx.fragment:fragment-testing:1.2.4
. La versión 1.2.4 contiene estas confirmaciones.
Correcciones de errores
- Se actualizaron las reglas de ProGuard de Fragment para permitir la ofuscación de fragmentos que se mantuvieron. (b/151605338)
- Se inhabilitó la regla de lint de
FragmentLiveDataObserve
en las clasesDialogFragment
, ya que su ciclo de vida y el ciclo de vida de sus vistas siempre están sincronizados, lo que hace que sea más seguro usarthis
oviewLifecycleOwner
para las llamadas aobserve
. (b/151765086)
Versión 1.2.3
Versión 1.2.3
18 de marzo de 2020
Lanzamiento de androidx.fragment:fragment:1.2.3
, androidx.fragment:fragment-ktx:1.2.3
y androidx.fragment:fragment-testing:1.2.3
. La versión 1.2.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error de
DialogFragment
que provocaba unStackOverflowError
cuando se llamaba agetLayoutInflater()
desdeonCreateDialog()
. (b/117894767, aosp/1258665) - Se redujo el alcance de las reglas de ProGuard incluidas de Fragment para garantizar que se puedan quitar las clases de Fragment sin utilizar. (b/149665169)
- Se corrigieron los falsos positivos en la comprobación de lint de
UseRequireInsteadOfGet
cuando se utilizaba un nombre de variable local que reemplazaba el nombre de propiedad de Kotlin. (b/149891163) FragmentContainerView
ya no arroja unaUnsupportedOperationException
cuando se usa el constructor incorrecto en la vista previa de diseño. (b/149707833)
Versión 1.2.2
Versión 1.2.2
19 de febrero de 2020
Lanzamiento de androidx.fragment:fragment:1.2.2
, androidx.fragment:fragment-ktx:1.2.2
y androidx.fragment:fragment-testing:1.2.2
. La versión 1.2.2 contiene estas confirmaciones.
Nuevas comprobaciones de lint
- La herramienta lint sugiere usar
viewLifecycleOwner
comoLifecycleOwner
para las llamadas aOnBackPressedDispatcher
enonCreateView()
,onViewCreated()
yonActivityCreated()
. (b/142117657) - Se agregó una nueva verificación de lint que confirma que estás usando la
debugImplementation
correcta cuando utilizas el artefactofragment-testing
. (b/141500106) - Los fragmentos ahora sugieren el uso de los métodos
require___()
asociados para mensajes de error más descriptivos en lugar decheckNotNull(get___())
,requireNonNull(get___())
oget___()!!
para todas las APIs de Fragment que incluyen un equivalente deget
yrequire
. (aosp/1202883)
Correcciones de errores
- Se corrigieron los archivos de ProGuard de Fragment a fin de evitar las advertencias de R8. (b/148963981)
- Se mejoró la comprobación de lint existente que sugiere el uso de
viewLifecycleOwner
cuando se utilizaobserve
a fin de controlar también la versión del método de extensión delivedata-ktx
deobserve
. (b/148996309) - Se corrigió el formato de muchas de las verificaciones de lint. (aosp/1157012)
Contribuciones externas
- Agradecemos a Zac Sweers, de Slack, por contribuir con las verificaciones de lint de
require___()
. (aosp/1202883)
Versión 1.2.1
Versión 1.2.1
5 de febrero de 2020
Lanzamiento de androidx.fragment:fragment:1.2.1
, androidx.fragment:fragment-ktx:1.2.1
y androidx.fragment:fragment-testing:1.2.1
. La versión 1.2.1 contiene estas confirmaciones.
Correcciones de errores
- Los fragmentos que se agregaron mediante los métodos
add
yreplace
que toman una instanciaClass
(o las versiones reificadas de Kotlin) ahora tienen su constructor predeterminado mantenido por ProGuard. (b/148181315) FragmentStatePagerAdapter
yFragmentPagerAdapter
ya no detectan las excepciones que arrojaFragmentManager
cuando se ejecutafinishUpdate()
. (aosp/1208711)- Se corrigió un error por el que
FragmentManager.findFragment()
no funcionaba con fragmentos que se agregaban mediante la etiqueta<fragment>
. (b/147784323) - Los fragmentos aumentados que usan la etiqueta
<fragment>
ahora siempre reciben una llamada aonInflate()
antes deonCreate()
cuando está en el diseño. (aosp/1215856) - Una llamada a
toString()
en una instancia deFragmentManager
ya no arroja unaNullPointerException
cuando ya se destruyó la Activity. (b/148189412)
Cambios de dependencia
- Fragment
1.2.1
ahora depende de Lifecycle ViewModel SavedState2.2.0
.
Versión 1.2.0
Versión 1.2.0
22 de enero de 2020
Lanzamiento de androidx.fragment:fragment:1.2.0
, androidx.fragment:fragment-ktx:1.2.0
y androidx.fragment:fragment-testing:1.2.0
. La versión 1.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.1.0
- FragmentContainerView:
FragmentContainerView
es el contenedor recomendado para los fragmentos agregados de forma dinámica, con lo que se reemplaza el uso deFrameLayout
y otros diseños. También admite los mismosclass
,android:name
yandroid:tag
opcional como la etiqueta de<fragment>
, pero usa un elementoFragmentTransaction
normal para agregar este fragmento inicial, en lugar de la ruta de acceso del código personalizado que usa<fragment>
. - Sincronización de
onDestroyView()
: Los fragmentos ahora esperan a que se completen las animaciones de salida y las transiciones de salida de framework y de AndroidX (al usar Transition1.3.0
) antes de llamar aonDestroyView()
. add()
yreplace()
basados en clases: Se agregaron nuevas sobrecargas deadd()
yreplace()
enFragmentTransaction
, que toman unaClass<? extends Fragment>
y unBundle
opcional de argumentos. Estos métodos usan tuFragmentFactory
para construir una instancia del fragmento que se agregará. También se agregaron afragment-ktx
las extensiones de Kotlin que usan tipos reificados (es decir,fragmentTransaction.replace<YourFragment>(R.id.container)
).- Integración de Lifecycle ViewModel SavedState:
SavedStateViewModelFactory
ahora es el valor predeterminado de fábrica que se utiliza cuando se usanby viewModels()
,by activityViewModels()
, el constructorViewModelProvider
o un objetoViewModelProviders.of()
con un fragmento. - Nuevas comprobaciones de Lint: Se agregó una nueva verificación de Lint que garantiza que utilices
getViewLifecycleOwner()
al observarLiveData
desdeonCreateView()
,onViewCreated()
oonActivityCreated()
. - Baja de
getFragmentManager()
: Los métodosgetFragmentManager()
yrequireFragmentManager()
de Fragment dejaron de estar disponibles y se reemplazaron por un solo métodogetParentFragmentManager()
, que muestra el valorFragmentManager
no nulo al que se agrega el fragmento (puedes usarisAdded()
para determinar si es seguro hacer la llamada). - Baja de
FragmentManager.enableDebugLogging()
: el métodoFragmentManager.enableDebugLogging
estático dejó de estar disponible. FragmentManager ahora respetaLog.isLoggable()
para la etiquetaFragmentManager
, lo que te permite habilitar el registroDEBUG
oVERBOSE
sin volver a compilar tu app.
Errores conocidos
- ProGuard no guarda automáticamente los fragmentos a los que se hace referencia mediante el atributo
class
oandroid:name
en unaFragmentContainerView
, y esto requiere que agregues manualmente una regla de conservación para cada clase de fragmento (b/142601969). - Cuando agregas un objeto
NavHostFragment
mediante unaclass
oandroid:name
en XML conFragmentContainerView
, no puedes usar el elementofindNavController()
enonCreate()
de tu Actividad. (b/142847973)
Versión 1.2.0-rc05
8 de enero de 2020
Lanzamiento de androidx.fragment:fragment:1.2.0-rc05
, androidx.fragment:fragment-ktx:1.2.0-rc05
y androidx.fragment:fragment-testing:1.2.0-rc05
. La versión 1.2.0-rc05 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una regresión en Fragment
1.2.0-rc04
cuando se usaba la etiqueta<fragment>
que causaba que se llamara aonViewCreated()
de forma incorrecta durante la destrucción de la actividad. (b/146290333) - Ahora, se borra el estado de no configuración de los fragmentos que se agregan con la etiqueta
<fragment>
incluso cuando solo están a veces en el diseño (es decir, solo en el diseño horizontal). Como consecuencia, estos fragmentos ahora se mueven correctamente aCREATED
, aunque no estén en el diseño, en lugar de crear una instancia, pero sin moverse por ningún método de ciclo de vida. (b/145769287)
Versión 1.2.0-rc04
18 de diciembre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-rc04
, androidx.fragment:fragment-ktx:1.2.0-rc04
y androidx.fragment:fragment-testing:1.2.0-rc04
. La versión 1.2.0-rc04 contiene estas confirmaciones.
Correcciones de errores
- Se ajustaron las animaciones para
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
yTRANSIT_FRAGMENT_FADE
a fin de evitar problemas visuales. (b/145468417)
Versión 1.2.0-rc03
4 de diciembre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-rc03
, androidx.fragment:fragment-ktx:1.2.0-rc03
y androidx.fragment:fragment-testing:1.2.0-rc03
. La versión 1.2.0-rc03 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un cambio de comportamiento no intencional en el que
findFragmentById()
/findFragmentByTag()
siguen mostrando los fragmentos que se quitaron mientras se ejecutan las transiciones o animaciones de salida. (b/143982969, aosp/1167585) - Ahora los fragmentos secundarios se detienen correctamente antes que los superiores cuando la actividad que los contiene llama a
onSaveInstanceState()
. (b/144380645) - Se solucionó un problema en el que se marcaban las vistas como
INVISIBLE
por error después de mostrar un fragmento oculto (b/70793925). - Las transiciones de elementos compartidos de fragmentos ahora controlan las vistas que se rotaron, escalaron, etcétera. (b/142835261)
Actualizaciones de la documentación
- Se aclaró la documentación sobre cómo controlar el código ahora que
setUserVisibleHint()
dejó de estar disponible. (b/143897055) - Se mejoró la documentación sobre
setFragmentFactory()
ygetFragmentFactory()
para aclarar que la configuración de un objetoFragmentFactory
también afectará a los FragmentManagers secundarios. (aosp/1170095)
Cambios de dependencia
- Los fragmentos ahora dependen de Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
y Activity1.1.0-rc03
.
Versión 1.2.0-rc02
7 de noviembre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-rc02
, androidx.fragment:fragment-ktx:1.2.0-rc02
y androidx.fragment:fragment-testing:1.2.0-rc02
. La versión 1.2.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Cuando se usa Kotlin, el LintFix para usar
getViewLifecycleOwner()
al observarLiveData
deonCreateView()
,onViewCreated()
oonActivityCreated()
(introducido en Fragment1.2.0-rc01
) ahora usaviewLifecycleOwner
de sintaxis de acceso a la propiedad de Kotlin, en lugar degetViewLifecycleOwner()
(aosp/1143821).
Versión 1.2.0-rc01
23 de octubre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-rc01
, androidx.fragment:fragment-ktx:1.2.0-rc01
y androidx.fragment:fragment-testing:1.2.0-rc01
. La versión 1.2.0-rc01 contiene estas confirmaciones.
Nuevas funciones
FragmentContainerView
ahora admite el atributoclass
además deandroid:name
, lo cual refleja la funcionalidad de la etiqueta<fragment>
. (b/142722242)- Se agregó una nueva comprobación de Lint que garantiza que utilices
getViewLifecycleOwner()
al observarLiveData
desdeonCreateView()
,onViewCreated()
oonActivityCreated()
(b/137122478).
Correcciones de errores
- Las devoluciones de llamada de
onDismiss
yonCancel
enDialogFragment
ahora garantizan que laDialogInterface
que se les pasa no es nula y quegetDialog()
muestra que no es nulo cuando se ejecutan. (b/141974033) FragmentContainerView
ahora agrega el fragmento que definen laclass
o elandroid:name
como parte de la inflación, lo que asegura quefindFragmentById()
yfindFragmentByTag()
funcionen posteriormente de inmediato. (b/142520327)- Se corrigió una
IllegalStateException
enFragmentContainerView
que se producía debido al estado que se guardaba. (b/142580713) - Se corrigió una
UnsupportedOperationException
enFragmentContainerView
que se produce cuando la claseFragmentContainerView
está ofuscada (b/142657034).
Errores conocidos
- ProGuard no guarda automáticamente los fragmentos a los que se hace referencia mediante el atributo
class
oandroid:name
en unaFragmentContainerView
, y esto requiere que agregues manualmente una regla de conservación para cada clase de fragmento Inhabilitamos la regla de Lint que sugiere pasar aFragmentContainerView
hasta que esto se corrija medianteaapt2
(b/142601969).
Versión 1.2.0-beta02
11 de octubre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-beta02
, androidx.fragment:fragment-ktx:1.2.0-beta02
y androidx.fragment:fragment-testing:1.2.0-beta02
. La versión 1.2.0-beta02 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema en el que
onInflate()
de Fragment no recibía los atributos adecuados deFragmentContainerView
e inutilizaba casos, comoNavHostFragment
(b/142421837).
Versión 1.2.0-beta01
9 de octubre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-beta01
, androidx.fragment:fragment-ktx:1.2.0-beta01
y androidx.fragment:fragment-testing:1.2.0-beta01
. La versión 1.2.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Se agregó compatibilidad de
FragmentContainerView
para agregar un fragmento inicial con compatibilidad adicional para los atributos XML opcionalesandroid:name
yandroid:tag
. A diferencia de la etiqueta<fragment>
,FragmentContainerView
usa unaFragmentTransaction
normal para agregar el fragmento inicial, lo que permite operaciones deFragmentTransaction
adicionales enFragmentContainerView
y habilita el uso de la vinculación de vista para la diseño (b/139830628, b/141177981). - Ahora Fragments contiene una advertencia de Lint que ofrece una solución rápida para reemplazar
<fragment>
porFragmentContainerView
(b/139830056).
Correcciones de errores
- Se corrigió un error
ClassCastException
que se producía cuando se usabaandroidx.transition
. (b/140680619) - Al utilizar Transition
1.3.0-beta01
, los fragmentos ahora esperan las transicionesandroidx.transition
(además de las transiciones y las animaciones de framework, que se corrigieron en Fragment1.2.0-alpha03
y Fragment1.2.0-alpha02
, respectivamente) para terminar antes de enviaronDestroyView()
. (aosp/1119841) - Al utilizar Transition
1.3.0-beta01
, los fragmentos ahora cancelan correctamente las transicionesandroidx.transition
antes de comenzar transiciones o animaciones nuevas en el mismo contenedor. (aosp/1119841) - Se solucionó un problema en el nivel de API 17 y versiones anteriores cuando se usaban transiciones
androidx.transition
en la vista raíz de Fragment al usarFragmentContainerView
. (b/140361893) - El artefacto
fragment-testing
ahora depende de AndroidX Test1.2.0
, que corrige una incompatibilidad con la versión más reciente de Espresso 3.2.0. (b/139100149) - Se quitó el uso de
Log.w
en FragmentManager (aosp/1126468).
Errores conocidos
- Los elementos
onInflate()
de Fragment no reciben los atributos adecuados deFragmentContainerView
e inutilizan casos, comoNavHostFragment
(b/142421837).
Versión 1.2.0-alpha04
18 de septiembre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-alpha04
, androidx.fragment-ktx:example:1.2.0-alpha04
y androidx.fragment:fragment-testing:1.2.0-alpha04
. La versión 1.2.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Los métodos
getFragmentManager()
yrequireFragmentManager()
deFragment
dejaron de estar disponibles y se reemplazaron por un solo métodogetParentFragmentManager()
, que muestra el valorFragmentManager
no nulo al que se agregó el fragmento (puedes usarisAdded()
para determinar si es seguro realizar la llamada) (b/140574496) - El método
FragmentManager.enableDebugLogging
estático dejó de estar disponible. FragmentManager ahora respetaLog.isLoggable()
para la etiquetaFragmentManager
, lo que te permite habilitar el registroDEBUG
oVERBOSE
sin volver a compilar tu app (aosp/1116591).
Correcciones de errores
- Ahora, los fragmentos se destruyen correctamente mientras se ejecutan animaciones de salida en otros fragmentos. (b/140574199)
- Se solucionó un problema por el cual Fragments llamaba a
Activity.findViewById()
, cuando antes no lo hacía (aosp/1116431).
Versión 1.2.0-alpha03
5 de septiembre de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-alpha03
, androidx.fragment:fragment-ktx:1.2.0-alpha03
y androidx.fragment:fragment-testing:1.2.0-alpha03
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Cambios en la API
FragmentContainerView
ahora esfinal
(b/140133091).
Correcciones de errores
FragmentContainerView
ahora revierte correctamente el orden de extracción al abrir fragmentos de la pila de actividades. (b/139104187)- Se solucionó un problema por el cual la animación incorrecta se ejecutaba cuando, al mismo tiempo, aparecía un fragmento y se agregaba un nuevo fragmento (b/111659726)
- Los fragmentos ahora esperan a que finalicen las transiciones (además de las animaciones, que se corrigieron en Fragment
1.2.0-alpha02
) antes de enviaronDestroyView()
(b/138741697).
Versión 1.2.0-alpha02
7 de agosto de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-alpha02
, androidx.fragment:fragment-ktx:1.2.0-alpha02
y androidx.fragment:fragment-testing:11.2.0-alpha02
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
SavedStateViewModelFactory
ahora es el valor predeterminado de fábrica que se utiliza cuando se usaby viewModels()
,by activityViewModels()
, el constructorViewModelProvider
oViewModelProviders.of()
con unFragment
. (b/135716331)- Se actualizaron las animaciones predeterminadas que se reproducen al usar
TRANSIT_FRAGMENT_OPEN
,TRANSIT_FRAGMENT_CLOSE
yTRANSIT_FRAGMENT_FADE
consetTransition
en unaFragmentTransaction
a fin de que coincidan con las animaciones que las actividades utilizan en los dispositivos Android 10. (aosp/1012812, aosp/1014730)
Cambios en la API
- Presenta a
FragmentContainerView
como el contenedor recomendado para los fragmentos agregados de forma dinámica, con lo que se reemplaza el uso deFrameLayout
, etc. A su vez, esto corrige problemas de orden z de animación y despacho de inserciones de ventana a elementos Fragment (b/37036000, aosp/985243, b/136494650). - Se agregó un método
FragmentManager.findFragment(View)
estático para recuperar el elemento Fragment de contención de una vista inflada por un fragmento. También hay una extensión de Kotlin disponible enfragment-ktx
(aosp/1090757). - Se agregaron nuevas sobrecargas de
add()
yreplace()
enFragmentTransaction
, que toman unaClass<? extends Fragment>
y unBundle
opcional de argumentos. Estos métodos usan tuFragmentFactory
para construir una instancia del fragmento que se agregará. También se agregó afragment-ktx
la extensión de Kotlin que usa tipos reificados (es decir,fragmentTransaction.replace<YourFragment>(R.id.container)
) (b/126124987). - Se agregaron las anotaciones de
@MainThread
a las devoluciones de llamada del ciclo de vida deFragment
. (b/127272564) - Las API relacionadas con el título de la ruta de navegación en
FragmentTransaction
yFragmentManager.BackStackEntry
dejaron de estar disponibles. (b/138252944) - El método
setTransitionStyle
enFragmentTransaction
dejó de estar disponible (aosp/1011537). - Muchos de los métodos en
FragmentManager
ya no sonabstract
.FragmentManager
en sí mismo sigue siendoabstract
y no se debería instanciar ni extender directamente; debe continuar obteniendo solo una instancia existente degetSupportFragmentManager()
,getChildFragmentManager()
, etc.
Correcciones de errores
- A partir de Fragment
1.1.0-rc04
: los fragmentos ahora cancelan correctamente las transiciones pospuestas en los fragmentos que se muestran. (b/138251858) - A partir de Fragment
1.1.0-rc03
: Se solucionó un problema por el cual llamar apostponeEnterTransition()
con un tiempo de espera superior a una vez no cancelaba los tiempos de espera anteriores (b/137797118) - A partir de Fragment
1.1.0-rc02
: Se corrigió una falla enFragmentPagerAdapter
yFragmentStatePagerAdapter
que se producía cuando se quitaba el elemento actual (b/137209870). - Los fragmentos ahora esperan a que finalicen las animaciones para despachar a
onDestroyView()
. (b/136110528) - Las animaciones de fragmentos secundarios y sus descendientes ahora se manejan correctamente cuando se reproducen animaciones en el Fragment superior. (b/116675313)
- Se corrigió una
NullPointerException
que se producía cuando se usaban transiciones de elementos compartidos y se las combinaba con una operación de resaltar y agregar. (b/120507394) - Se agregó una solución alternativa a las
IllegalStateException
que se producían cuando se usabanFragmentPagerAdapter
yFragmentStatePagerAdapter
en las pruebas con Robolectric (b/137201343).
Versión 1.2.0-alpha01
2 julio de 2019
Lanzamiento de androidx.fragment:fragment:1.2.0-alpha01
, androidx.fragment:fragment-ktx:1.2.0-alpha01
y androidx.fragment:fragment-testing:1.2.0-alpha01
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
- FragmentManager ahora llama a
requestApplyInsets()
después de adjuntar la vista de Fragment y directamente antes de llamar aonViewCreated()
, lo que garantiza que tu vista siempre tenga las inserciones correctas. (b/135945162)
Correcciones de errores
- Se corrigió una
NullPointerException
cuando aparecía unaFragmentTransaction
que usabasetPrimaryNavigationFragment()
antes dereplace()
(b/134673465).
Versión 1.1.0
Versión 1.1.0
5 de septiembre de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0
, androidx.fragment:fragment-ktx:1.1.0
y androidx.fragment:fragment-testing:1.1.0
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Cambios importantes desde 1.0.0
- fragment-testing: el artefacto
fragment-testing
proporciona una claseFragmentScenario
para probar fragmentos de forma aislada. Consulta la documentación de prueba de fragmentos de la app para obtener más detalles. - FragmentFactory: ahora puedes establecer una
FragmentFactory
en unFragmentManager
para administrar la creación de instancias de fragmentos, lo que elimina el requisito estricto de tener un constructor sin argumentos. - Delegados de propiedades de Kotlin para ViewModels: el artefacto
fragment-ktx
ahora contiene dos delegados de propiedades de Kotlin:by viewModels()
para acceder a los objetos ViewModel asociados con el fragmento individual yby activityViewModels()
para acceder a los objetos ViewModel dentro de la actividad. - Ciclo de vida máximo: ahora puedes establecer un estado de ciclo de vida máximo para un Fragment llamando a
setMaxLifecycle()
en unaFragmentTransaction
. Esto reemplazasetUserVisibleHint()
, que dejó de estar disponible.FragmentPagerAdapter
yFragmentStatePagerAdapter
tienen un nuevo constructor que te permite usar el nuevo comportamiento. - Constructor FragmentActivity LayoutId: ahora las subclases de
FragmentActivity
pueden invocar opcionalmente a un constructor enFragmentActivity
que toma un ID deR.layout
, que indica el diseño que se debe establecer como vista de contenido como alternativa para invocar asetContentView()
enonCreate()
. Esto no cambia el requisito de que tu subclase tenga un constructor sin argumentos. - Constructor Fragment LayoutId : ahora las subclases de
Fragment
pueden invocar a un constructor enFragment
que toma un ID deR.layout
, que indica el diseño que se debe usar para este fragmento como alternativa para anularonCreateView()
. El diseño inflado se puede configurar enonViewCreated()
. - Posponer con un tiempo de espera: se agregó una nueva sobrecarga de
postponeEnterTransition()
que toma un tiempo de espera.
Versión 1.1.0-rc04
7 de agosto de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-rc04
, androidx.fragment:fragment-ktx:1.1.0-rc04
y androidx.fragment:fragment-testing:1.1.0-rc04
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Correcciones de errores
- Los fragmentos ahora cancelan correctamente las transiciones pospuestas en los fragmentos que se resaltan (b/138251858).
Versión 1.1.0-rc03
19 de julio de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-rc03
, androidx.fragment:fragment-ktx:1.1.0-rc03
y androidx.fragment:fragment-testing:1.1.0-rc03
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Correcciones de errores
- Se solucionó un problema por el cual llamar a
postponeEnterTransition()
con un tiempo de espera más de una vez no cancelaba los tiempos de espera anteriores. (b/137797118)
Versión 1.1.0-rc02
17 de julio de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-rc02
, androidx.fragment:fragment-ktx:1.1.0-rc02
y androidx.fragment-testing:fragment:1.1.0-rc02
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Correcciones de errores
- Se corrigió una falla en
FragmentPagerAdapter
yFragmentStatePagerAdapter
que se producía cuando se quitaba el elemento actual (b/137209870).
Versión 1.1.0-rc01
2 julio de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-rc01
, androidx.fragment:fragment-ktx:1.1.0-rc01
y androidx.fragment:fragment-testing:1.1.0-rc01
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Correcciones de errores
- Los fragmentos ahora actualizan su visibilidad de forma correcta cuando se usan las operaciones
show()
ohide()
mientras se está ejecutando la transición (b/133385058). - Se corrigió una
NullPointerException
cuando aparecía unaFragmentTransaction
que usabasetPrimaryNavigationFragment()
antes dereplace()
(b/134673465).
Versión 1.1.0-beta01
5 de junio de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-beta01
, androidx.fragment:fragment-ktx:1.1.0-beta01
y androidx.fragment:fragment-testing:1.1.0-beta01
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Correcciones de errores
- Ahora se anidan de forma correcta las devoluciones de llamada de
androidx.lifecycle.Lifecycle
(específicamente relacionadas conSTARTED
,RESUMED
,PAUSED
,STOPPED
yDESTROYED
) para fragmentos anidados. (b/133497591) - Las instancias de
OnBackPressedCallback
registradas en el elementoonCreate()
de un fragmento ahora tienen precedencia correcta sobre el FragmentManager secundario (b/133175997) - Los fragmentos secundarios ya no tienen animaciones cuando se reemplaza el fragmento superior. (b/121017790)
- Las animaciones y transiciones de fragmentos ahora se omiten cuando se usa
animateLayoutChanges="true"
, con lo que se soluciona un problema por el cual los fragmentos no se destruían correctamente (b/116257087).
Versión 1.1.0-alpha09
16 de mayo de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-alpha09
, androidx.fragment:fragment-ktx:1.1.0-alpha09
y androidx.fragment:fragment-testing:1.1.0-alpha09
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Cambios en la API
- Los fragmentos ahora reciben una devolución de llamada a un nuevo método
onPrimaryNavigationFragmentChanged(boolean)
cuando cambia el fragmento de navegación principal. (aosp/960857)
Correcciones de errores
- Los elementos de menú inflados por un fragmento secundario ahora se quitan correctamente cuando se quita el fragmento principal. b/131581013
Versión 1.1.0-alpha08
7 de mayo de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-alpha08
, androidx.fragment:fragment-ktx:1.1.0-alpha08
y androidx.fragment:fragment-testing:1.1.0-alpha08
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Esta versión es incompatible con Preferences 1.1.0-alpha01 a 1.1.0-alpha04. Actualiza a Preferences 1.1.0-alpha05 cuando uses esta versión de Fragments.
Nuevas funciones
- Se agregó una nueva sobrecarga de
postponeEnterTransition()
que toma un tiempo de espera, después de lo cual Fragment llama automáticamente astartPostponedEnterTransition()
. (b/120803208)
Cambios en la API
- Cambio rotundo: se quitó el método
FragmentFactory
instantiate
que ya había dejado de estar disponible y que tomaba unBundle
. (aosp/953856) - Cambio rotundo: se cambiaron los nombres de las constantes
RESUME_ONLY_CURRENT_FRAGMENT
yUSE_SET_USER_VISIBLE_HINT
deFragmentPagerAdapter
yFragmentStatePagerAdapter
aBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
yBEHAVIOR_SET_USER_VISIBLE_HINT
, respectivamente. (aosp/954782)
Correcciones de errores
- Los fragmentos que tienen su ciclo de vida limitado mediante
setMaxLifecycle()
ya no se reanudan antes de alcanzar su estado final. (b/131557151) - Cuando se use
setMaxLifecycle(Lifecycle.State.CREATED)
, los fragmentos se destruirán correctamente. (aosp/954180)
Versión 1.1.0-alpha07
25 de abril de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-alpha07
, androidx.fragment:fragment-ktx:1.1.0-alpha07
y androidx.fragment:fragment-testing:1.1.0-alpha07
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
- Ahora puedes establecer un estado de Lifecycle máximo para un fragmento. Para ello, puedes llamar a
setMaxLifecycle()
en unaFragmentTransaction
. Esto reemplazasetUserVisibleHint()
, que dejó de estar disponible.FragmentPagerAdapter
yFragmentStatePagerAdapter
tienen un nuevo constructor que te permite usar el nuevo comportamiento. (b/129780800).
Cambios en la API
moveToState(STARTED)
enFragmentScenario
ahora solo se puede invocar en dispositivos con el nivel de API 24 o superior (b/129880016).
Cambios en el comportamiento
- Como consecuencia de (b/129907905), los fragmentos en la pila de actividades no recibirán una devolución de llamada a
onCreateView()
cuando se recree la actividad de hosting. Ahora se llamará aonCreateView()
solo cuando el fragmento se vuelva visible (es decir, si se resalta la pila de actividades).
Correcciones de errores
- Se solucionó un problema que se producía cuando se usaba una etiqueta
<fragment>
en XML y el constructorcontentLayoutId
deFragmentActivity
oAppCompatActivity
. (b/129907905) - Se corrigió un problema por el que los fragmentos de la pila de actividades no se movían, al menos a
CREATED
, después de un cambio de configuración, lo que provocaba que los ViewModels y los fragmentos secundarios retenidos no se eliminaran correctamente (b/129593351). - Se corrigió una falla en
restoreSaveState
causada por una desincronización de los fragmentos retenidos después de guardar el estado de la instancia. (b/130433793) (aosp/947824) - Se corrigieron errores por los que no se llamaba una
OnBackPressedCallback
agregado con un ciclo de vida de fragmento si elFragmentManager
tenía una pila de actividades. Consulta androidx.activity 1.0.0-alpha07 para obtener más detalles (aosp/948209). - Los fragmentos ya no aplican
LAYER_TYPE_HARDWARE
en las animaciones. Si necesitas específicamente una animación de capa de hardware, configúrala como parte de tu animación (b/129486478).
Versión 1.1.0-alpha06
3 de abril de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-alpha06
, androidx.fragment:fragment-ktx:1.1.0-alpha06
y androidx.fragment:fragment-testing:1.1.0-alpha06
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Nuevas funciones
- Las excepciones arrojadas por FragmentManager ahora incluyen el nombre del fragmento en el mensaje (b/67759402).
Cambios en la API
Fragment
yFragmentActivity
ahora contienen un segundo constructor que toma un@LayoutRes int
, que a su vez reemplaza el comportamiento anterior de anotar tu clase con@ContentView
. Este enfoque funciona tanto en la app como en los módulos de las bibliotecas (b/128352521).- El elemento
onActivityResult()
de FragmentActivity ahora está marcado correctamente como@CallSuper
. (b/127971684) - El método
instantiate
de FragmentFactory que toma un argumento Bundle dejó de estar disponible y las apps deberían usar la nueva sobrecarga deinstantiate
que no toma un Bundle. (b/128836103) - Los métodos
FragmentScenario
ahora están anotados correctamente con@StyleRes
. (aosp/924193) FragmentTabHost
quedó obsoleto. (b/127971835)- Se quitó
getThemedContext()
de FragmentActivity. (aosp/934078)
Correcciones de errores
- Se corrigió una regresión en 1.1.0-alpha05 que hacía que el fragmento entrante parpadeara en la pantalla. (b/129405432)
- Se solucionó un problema por el que el fragmento de navegación principal se perdía después de una serie de operaciones popBackStack+replace+popBackStack (b/124332597).
- Se corrigió un problema que se producía cuando se usaban los constructores
@ContentView
en tu actividad al restaurar el estado del fragmento. (b/127313094) - Se corrigió la lógica de
setTargetFragment()
cuando se reemplaza un fragmento de destino existente con un fragmento aún no conectado a FragmentManager. (aosp/932156)
Versión 1.1.0-alpha05
13 de marzo de 2019
Lanzamiento de androidx.fragment:fragment:1.1.0-alpha05
, androidx.fragment:fragment-ktx:1.1.0-alpha05
y androidx.fragment:fragment-testing:1.1.0-alpha05
. Para obtener una lista completa de las confirmaciones incluidas en esta versión, consulta este vínculo.
Nuevas funciones
- Las búsquedas de anotaciones de
@ContentView
ahora se almacenan en caché. (b/123709449)
Cambios en el comportamiento
- Ahora, cuando se llama a
remove()
,hide()
,show()
,detach()
ysetPrimaryNavigationFragment()
con un fragmento adjunto a un FragmentManager diferente, se muestra unaIllegalStateException
, en lugar de una falla en silencio (aosp/904301).
Correcciones de errores
- Ahora,
onNewIntent
paraFragmentActivity
se marca correctamente con@CallSuper
. (b/124120586) - Se solucionó un problema por el que se podía llamar dos veces a
onDismiss()
deDialogFragment
cuando se usabagetDialog().dismiss()
ogetDialog().cancel()
. (b/126563750)
Versión 1.1.0-alpha04
7 de febrero de 2019
Lanzamiento de androidx.fragment:fragment 1.1.0-alpha04
, androidx.fragment:fragment-ktx 1.1.0-alpha04
y androidx.fragment:fragment-testing 1.1.0-alpha04
.
Nuevas funciones
- Se agregó compatibilidad con la anotación de clase
@ContentView
que te permite indicar qué archivo de diseño en formato XML se debe aumentar como alternativa para anularonCreateView()
. Se recomienda consultar el trabajo relacionado enonViewCreated()
(aosp/837619). fragment-testing
ahora depende de la versión estable deandroidx.test:core-ktx
1.1.0. (b/121209673)- Ahora puedes usar
openActionBarOverflowOrOptionsMenu
conFragmentScenario
para probar los menús de opciones con hosting en Fragment. (b/121126668)
Cambios en la API
- Se agregó un método
requireArguments()
que muestra un@NonNull Bundle
o arroja unaIllegalStateException
(b/121196360). - Se agregó una nota que indica que no se deberían anular
getLifecycle()
,getViewLifecycleOwner()
ygetViewLifecycleOwnerLiveData()
, y que pasarán a ser definitivos en una versión futura. Presenta una solicitud de función si actualmente anulas este método (aosp/880714). - Se agregó una nota que indica que no se debería anular
getViewModelStore()
y que será definitivo en una versión futura. Presenta una solicitud de función si actualmente anulas este método (aosp/880713). - Se solucionó un problema relacionado con la compatibilidad binaria con versiones anteriores de Fragment. (aosp/887877, aosp/889834)
Correcciones de errores
- Los fragmentos de destino se eliminan correctamente cuando pasas
null
asetTargetFragment()
. (aosp/849969) - Se solucionó un problema por el que, en ocasiones, los fragmentos de destino no estaban disponibles en
onDestroy()
o después de esta instancia. (b/122312935) - Ahora se llama a OnDismiss() de DialogFragment antes de
onDestroy()
. (aosp/874133, aosp/890734)
Versión 1.1.0-alpha03
17 de diciembre de 2018
Nuevas funciones
- Fragment ahora implementa
BundleSavedStateRegistryOwner
y depende de la biblioteca SavedState, recientemente publicada. (aosp/824380) - Se agregó un delegado de propiedad
by activityViewModels
de Kotlin para recuperar objetos ViewModel asociados con la actividad que los contiene. (b/119050253) - Se amplió el delegado de propiedad
by viewModels
de Kotlin para tomar un método lambda opcional a fin de obtenerViewModelStoreOwner
, lo que te permite pasar el fragmento superior u otroViewModelStoreOwner
personalizado con código comoval viewModel: MyViewModel by viewModels(::requireParentFragment)
. (b/119050253)
Cambios en la API
FragmentScenario
ahora te permite especificar un tema, comoTheme.AppCompat
. (b/119054431) Este es un cambio rotundo.- Se agregó un método
requireView()
que muestra una@NonNull View
o arroja unaIllegalStateException
. (b/120241368) - Se agregó un método
requireParentFragment()
que muestra un@NonNull Fragment
o arroja unaIllegalStateException
. (b/112103783)
Correcciones de errores
- Se corrigió una IllegalStateException: falla al guardar el estado. (b/120814739)
- Los fragmentos que se restauran del estado de la instancia guardada siempre recibirán un
Bundle
no nulo. (b/119794496) - Los fragmentos eliminados ya no reutilizan su objeto
Lifecycle
si se vuelven a agregar. (b/118880674)
Versión 1.1.0-alpha02
3 de diciembre de 2018
Nuevas funciones
- Las extensiones de Kotlin de FragmentScenario ahora te permiten usar un método lambda para la construcción de fragmentos, en lugar de pasar una instancia de
FragmentFactory
(aosp/812913).
Correcciones de errores
- Se corrigió una IllegalStateException cuando se usan fragmentos anidados en la pila de actividades. (b/119256498)
- Se corrigió una falla que se producía cuando se usaba
FragmentScenario.recreate()
con unaFragmentFactory
. (aosp/820540) - Se solucionó un problema por el que no era posible acceder a los fragmentos de destino después de que se eliminaban (aosp/807634).
Versión 1.1.0-alpha01
5 de noviembre de 2018
Esta es la primera versión del artefacto fragment-testing
y FragmentScenario
, que se construye sobre las API de androidx.test:core. Consulta la Documentación de prueba de Fragment para obtener más detalles.
Nuevas funciones
- Se agregó la nueva clase FragmentScenario para probar fragmentos de forma aislada.
- Ahora puedes establecer una
FragmentFactory
en cualquierFragmentManager
para controlar la manera en que se crean las nuevas instancias de Fragment. - Se agregó un nuevo delegado de propiedad
by viewModels()
de Kotlin para recuperar objetos ViewModel de un fragmento. - Se cancelan en un
onStop()
de Fragment los eventos de entrada pendientes (como los clics).
Cambios en la API
- Se expandieron significativamente las anotaciones de nulabilidad en la superficie de la API de Fragment.
Correcciones de errores
- Se solucionó un problema que causaba que las operaciones de Fragment fallaran desde LiveData. (b/77944637)
Errores conocidos
- No es posible acceder a los fragmentos de destino después de quitar un fragmento del FragmentManager.
fragment-testing
depende deandroidx.test:core:1.0.0-beta01
, en lugar delandroidx.test:core:1.0.0
correcto.