Fragment

Segmenta tu app en varias pantallas independientes alojadas en un objeto Activity.
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.

Crear un error nuevo

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 una IndexOutOfBoundsException. (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 elemento ViewGroup ahora esperan onContainerAvailable antes de pasar a onStart(). Esto afecta a los usuarios de esa API, como AndroidFragment, que ahora espera a que AndroidFragment vuelva a ingresar a la composición antes de moverla a través de onStart(). (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 estado CREATED 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 un Composable 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 usar AndroidViewBinding para aumentar un fragmento.
  • Ahora, la devolución de llamada onBackStackChangeCancelled en la interfaz OnBackStackChangedListener de FragmentManager se activa como parte de la ejecución de operaciones en FragmentManager y la acerca a la hora de la devolución de llamada onBackStackChangeCommitted.

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 interfaz FragmentManagers OnBackStackChangedListener ahora se activa como parte de la ejecución de operaciones en FragmentManager y la acerca a la hora de la devolución de llamada a onBackStackChangeCommitted. (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 de sharedElement 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 de AndroidFragment 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 AndroidViewBinding Composable.(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

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
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

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

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 de onGetHost(). (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 una NullPointerException desde handleOnBackProgressed si nunca se agregaba FragmentManager.OnBackStackChangedListener a través de addOnBackStackChangedListener. (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 proporciona onBackStackChangeProgressed() y onBackStackChangeCancelled() 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á una NullPointerException desde handleOnBackProgressed si nunca se agregó FragmentManager.OnBackStackChangedListener a través de addOnBackStackChangedListener. 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

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 una FragmentContainerView, sus estados, como FragmentManager, ID y host, ahora son accesibles en la devolución de llamada onInflate. (I1e44c, b/307427423).
  • Desde Fragment 1.6.2: Cuando se usa clearBackStack para quitar un conjunto de fragmentos, el ViewModel de cualquier fragmento anidado ahora se borra cuando se borra el ViewModels 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 Transition 1.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 elemento onCreate() 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 el enablePredictiveBack() experimental y pasando false.

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 como FragmentManager, ID y host ahora son accesibles en la devolución de llamada onInflate. (I1e44c, b/307427423).
  • Cuando uses clearBackStack para quitar un conjunto de fragmentos, ahora se borrará cualquier elemento ViewModel de fragmento anidado cuando también se borre el elemento ViewModels 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 (clases Parcelable personalizadas) y el estado proporcionado por el desarrollador, que ahora siempre se almacena en un Bundle que permite determinar con exactitud el origen del estado de un fragmento
  • Se expandió la interfaz FragmentManager.OnBackStackChangedListener con dos devoluciones de llamada adicionales de onBackStackChangeStarted y onBackStackChangeCommitted que se llaman con cada Fragment 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 nueva WrongNestedHierarchyViolation que detecta cuándo un fragmento secundario está anidado dentro de su jerarquía de vista superior, pero no se lo agregó al childFragmentManager superior
  • Las APIs de Fragment y FragmentManager que toman un Intent o IntentSender 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 a ComponentDialog subyacente a través de la API de requireComponentDialog().
  • 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 y androidx.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 solicitudes startActivityForResult 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 y onBackStackChangeCommitted 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 a ComponentDialog subyacente a través de la API de requireComponentDialog(). (I022e3, b/234274777).
  • Las APIs de fragmentos commitNow(), executePendingTransactions() y popBackStackImmediate() 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 y onBackStackChangeCommitted ahora solo se ejecutan cuando se cambia la pila de actividades de FragmentManager. (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 a clearFragmentResultListener dentro de un setFragmentResultListener no funcionaba si Lifecycle ya era STARTED y ya había un resultado disponible (If7458).

Actualizaciones de dependencias

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 el onBackStackChangedListener de FragmentManager 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 y onBackStackChangeCommitted, que permiten información adicional y control sobre cuándo se producen cambios en la pila de actividades en FragmentManager (Ib7ce5, b/238686802).

Cambios en la API

  • Las APIs de Fragment y FragmentManager que toman un objeto Intent o IntentSender 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 nueva WrongNestedHierarchyViolation que detecta cuándo un fragmento secundario está anidado dentro de su jerarquía de vista superior, pero no se lo agregó al childFragmentManager superior (I72521, b/249299268).

Cambios en el comportamiento

  • Los fragmentos ahora restablecen su estado SavedStateRegistry antes de onAttach(), 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 estado ViewModel 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 de onDismiss() (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ón popBackStack() y otra replace() al mismo tiempo generaba que los fragmentos salientes ejecutaran el objeto Animation/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 (clases Parcelable personalizadas) y el estado proporcionado por el desarrollador, que ahora siempre se almacena en un Bundle 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 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

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 un setFragmentResultListener no funcionaba si Lifecycle ya era STARTED 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() y onConfigurationChanged() (I34581, I8dfe6 y b/242570955).
  • Los fragmentos secundarios anidados ya no recibirán varias devoluciones de llamada onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() o onConfigurationChanged() (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() y replace() al mismo tiempo podía generar que los fragmentos salientes ejecutaran el objeto Animation/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

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 un ViewModelProvider.Factory sin estado a través del CreationExtras de Lifecycle 2.5.0.
  • Integración de diálogos de componentes: DialogFragment ahora usa ComponentDialog a través de Activity 1.5.0 como el diálogo predeterminado que muestra onCreateDialog().
  • 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 un Bundle, en lugar de hacerlo directamente en un Parcelable 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 de FragmentManager.
    • 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 Fragment.

Otros cambios

  • FragmentStrictMode ahora permite que fragmentos privados de terceros omitan penalizaciones por incumplimiento específicas usando allowViolation() 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 de MenuHost y MenuProvider que se agregaron en Activity 1.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étodo dismissNow que usa commitNow para la paridad con la función showNow. Ten en cuenta que esto no hará que Dialog se descarte de inmediato, sino que solo actualizará el estado de FragmentManager de manera síncrona (I15c36, b/72644830).

Refactorización del estado de las instancias guardado

  • FragmentManager ahora guarda su estado de instancia guardado en un Bundle, en lugar de hacerlo directamente en un Parcelable 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

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 de MenuHost y MenuProvider que se agregaron en Activity 1.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 de CreationExtras, incluso cuando se inicializó con un SavedStateRegistryOwner. 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 funciones by viewModels() y by activityViewModels() (Ibefe7, b/217601110).

Cambios en el comportamiento

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 usando allowViolation() 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

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 lambda ownerProducer personalizada con la función diferida by viewModels(), se usará defaultViewModelProviderFactory de ese propietario, si no se proporciona un ViewModelProvider.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 llamada registerForActivityResult() de un elemento Fragment (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 diferida by viewModels(), se usará defaultViewModelProviderFactory de ese propietario, si no se proporciona una ViewModelProvider.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. 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. Consulta StrictMode para fragmentos.
  • Ahora, FragmentContainerView proporciona un método getFragment() que muestra el fragmento que se agregó al contenedor más recientemente. Esta vista usa la misma lógica que findFragmentById() con el ID de FragmentContainerView, pero permite encadenar la llamada.

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentScenario ahora implementa Closeable, lo que te permite usarlo con el método use 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 usando addToBackStack() 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 de ViewModel asociada con esos fragmentos (y no se llama a onCleared() 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 usa setReorderingAllowed(true) para todas las transacciones que crea cuando llamas a show(), showNow() o dismiss() (Ie2c14).
  • La advertencia de lint que era demasiado larga de DetachAndAttachFragmentInSameFragmentTransaction se acortó a DetachAndAttachSameFragment (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 a detach() y attach() en el mismo Fragment, en el mismo FragmentTransaction. 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 API addMenuProvider de MenuHost. (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 y onRequestPermissionsResult, se expandieron con más detalles (cce80f)
  • Se expandió el mensaje de baja de onActivityCreated() para Fragment y DialogFragment 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 con saveBackStack(name). (I70cd7)

Cambios en la API

  • La clase FragmentContainerView se reescribió en Kotlin para garantizar que la función getFragment 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 una FragmentTransaction 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 de saveBackStack(), incluso después de que se restableció ese estado. (Ied212)
  • El método dismissAllowingStateLoss() de DialogFragment 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étodo show(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 en GONE cuando se usa hide() y la vista raíz tiene el valor transitionGroup=”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

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 usa SavedStateRegistry, de forma interna, para guardar su estado. Los métodos saveAllState() y restoreSavedState() también dejaron de estar disponibles en FragmentController. Si usas FragmentController para alojar fragmentos fuera de FragmentActivity, debes hacer que FragmentHostCallbacks implemente SavedStateRegistryOwner (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 ejecutaba FragmentTransaction que usaba replace(). (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 de restoreBackStack() para admitir varias pilas de actividades. De esta manera, también se solucionó un problema por el que no se verificaba setReorderingAllowed(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 de FragmentManager, 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 un FragmentContainerView; 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 Fragment 1.3.4 mediante aosp/1679887. Los fragmentos ahora controlan correctamente los grupos de transición (ya sean establecidos directamente a través de transitionGroup="true", o bien indirectamente a través de transitionName o background) y los elementos compartidos ya no arrojarán IndexOutOfBoundsException. (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 elemento FragmentManager, independientemente de la política de modo estricto que se use. (I02df6, b/187872638)
  • FragmentStrictMode ahora admite la exención de determinadas clases de Fragment de los elementos Violation 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). Cada Violation contiene lo siguiente:

    • WrongFragmentContainerViolation ahora contiene el ViewGroup al que se intentaba agregar Fragment. (I83c75, b/187871150)
    • TargetFragmentUsageViolation se amplió a SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation y GetTargetFragmentRequestCodeUsageViolation, y SetTargetFragmentUsageViolation contiene el fragmento de destino y el código de solicitud. (I741b4, b/187871150)
    • SetUserVisibleHintViolation ahora contiene el valor booleano que se pasa a setUserVisibleHint(). (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 del Fragment que causa la infracción. (I0544d, b/187871150)
    • RetainInstanceUsageViolation ahora es abstracto y tiene dos subclases, SetRetainInstanceUsageViolation y GetRetainInstanceUsageViolation, 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 atributo fitsSystemWindow 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étodo getFragment() que muestra el fragmento que se agregó al contenedor más recientemente. Esta vista usa la misma lógica que findFragmentById() con el ID de FragmentContainerView, 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 usando addToBackStack() 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 de ViewModel asociada con esos fragmentos (y no se llama a onCleared() 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 de Fragment, que se había quitado, se está volviendo a agregar a un FragmentManager. Nunca debes interactuar con una instancia de Fragment ni mantener una referencia a ella después de que se haya destruido y quitado de un FragmentManager. (#142, b/153738653)
  • detectFragmentTagUsage() detecta cuándo usas la etiqueta <fragment> en tu XML de diseño. Debes usar FragmentContainerView 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 una FragmentContainerView. Siempre debes usar FragmentContainerView como el contenedor de fragmentos en tu diseño. (#146, b/181137036)
  • detectRetainInstanceUsage() detecta cuándo usas las APIs de setRetainInstance() o getRetainInstance(), que dejaron de estar disponibles. (#140, b/153737954)
  • detectSetUserVisibleHint() detecta cuándo usas la API setUserVisibleHint() que dejó de estar disponible. (#136, b/153738974)
  • detectTargetFragmentUsage() detecta cuándo usas las APIs setTargetFragment(), getTargetFragment() o getTargetRequestCode(), que dejaron de estar disponibles (#139, b/153737745)

Cambios en la API

Nuevas comprobaciones de lint

  • La comprobación de lint UseGetLayoutInflater ahora advierte cuando se usa LayoutInflater.from(Context) en un DialogFragment; siempre debes usar el método getLayoutInflater() del fragmento de diálogo para obtener el LayoutInflater adecuado. (#156, b/170781346)
  • La comprobación de lint DialogFragmentCallbacksDetector ahora advierte cuando se llama a setOnCancelListener o setOnDismissListener en el método onCreateDialog() de un DialogFragment; estos objetos de escucha son propiedad del DialogFragment, por lo que debes anular onCancel() y onDismiss() 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 de ViewTreeViewModelStoreOwner.get() con ViewModelProvider o el método de Jetpack Compose de viewModel() en un fragmento. Estos casos de uso ahora utilizan correctamente el elemento ViewModelProvider.Factory que proporciona tu fragmento si anula getDefaultViewModelProviderFactory() (como hacen los fragmentos @AndroidEntryPoint anotados cuando usan Hilt). Si no anulas ese método, se creará como fábrica predeterminada una SavedStateViewModelFactory 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 instancias BottomNavigationBar y FloatingActionButton. (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

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 usa hide() y la vista raíz tiene el valor transitionGroup=”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

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 de transitionGroup="true", o bien indirectamente a través de transitionName o background) y los elementos compartidos ya no arrojarán IndexOutOfBoundsException. (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 de ViewTreeViewModelStoreOwner.get() con ViewModelProvider o el método de Jetpack Compose de viewModel() en un fragmento cuando se usa Hilt. Estos casos de uso ahora utilizan correctamente el elemento ViewModelProvider.Factory que proporciona tu fragmento si anula getDefaultViewModelProviderFactory() (como hacen los fragmentos @AndroidEntryPoint anotados). Si no anulas ese método, se creará como fábrica predeterminada una SavedStateViewModelFactory 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 instancias BottomNavigationBar y FloatingActionButton. (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 con SavedStateRegistryOwner, que se muestra mediante ViewTreeSavedStateRegistryOwner.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 animaciones popEnter no se ejecutaran cuando se mostraba un elemento FragmentTransaction que incluía una operación setPrimaryNavFragment, como las que usaba NavHostFragment. (I38c87, b/183877426)
  • Ahora, FragmentContainerView garantiza que cada Fragment reciba un conjunto nuevo de WindowInsets, 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 clase Dialog 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, como BottomSheetDialog. (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() y commit() 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 que DialogFragment se puede usar con ComposeView. (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 fragmento toString(). (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 de setFragmentResultListener 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 en RESUMED. (I452ac, (I9fa49)

Actualizaciones de dependencias

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 Activity 1.2.0 a fin de controlar startActivityForResult()+onActivityResult(), así como flujos requestPermissions()+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 en FragmentActivity o AppCompatActivity.
  • 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 menos STARTED. 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 de onAttachFragment() en FragmentActivity y Fragment. Se agregó un FragmentOnAttachListener nuevo para brindar una alternativa más flexible, que permite la delegación de onAttachFragment() 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 clase FragmentScenario del artefacto fragment-testing se volvió a escribir en Kotlin y recibió varias mejoras:

    • El elemento FragmentScenario ahora usa el objeto setMaxLifecycle() para implementar el parámetro moveToState(), 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 elemento Lifecycle.State inicial para admitir la declaración del estado del fragmento antes de moverlo a cada Lifecycle.State por primera vez.
    • Ahora hay una alternativa a la API de FragmentScenario del objeto onFragment en forma del método withFragment 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.
  • Compatibilidad con ViewTree: Fragment ahora admite las API de ViewTreeLifecycleOwner.get(View) ViewTreeViewModelStoreOwner.get(View) y ViewTreeSavedStateRegistryOwner que se agregaron en Lifecycle 2.3.0 y SavedState 1.1.0, de manera que se mostrará Fragment como ViewModelStoreOwner, y a SavedStateRegistryOwner y LifecycleOwner vinculado al Lifecycle de vista de los fragmentos cuando se usa View dentro de Fragment.

  • Cambios en la animación de TRANSIT_: Los efectos predeterminados de los fragmentos, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE y TRANSIT_FRAGMENT_FADE, ahora usan Animator en lugar de Animation. Los recursos utilizados para compilar estos animadores ahora son privados.

  • Baja de setRetainInstance(): Dejó de estar disponible el método setRetainInstance() 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 de ViewModel y la devolución de llamada de onCleared() que recibe).

  • Baja del adaptador ViewPager 1: Con la actualización de ViewPager2 1.0.0, dejaron de estar disponibles las clases FragmentPagerAdapter y FragmentStatePagerAdapter para interactuar con ViewPager. 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 un DialogFragment 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 un Animation 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 que Lifecycle llegue a CREATED, 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 usa FragmentContainerView. (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 que onCreateOptionsMenu() y ya no se llama cuando un fragmento superior llama a setMenuVisibility(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 una FragmentContainerView 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() o onViewCreated(). (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 para FragmentAction (I19d31)

Cambios en el comportamiento

  • Ahora, las vistas FragmentContainerView que no aumentan un fragmento con el atributo class o android:name se pueden usar fuera de una FragmentActivity. (Id4397, b/172266337)
  • Ahora, si se intenta establecer el ciclo de vida máximo de un fragmento en DESTROYED, se arrojará una excepción IllegalArgumentException. (Ie7651, b/170765622)
  • Ahora, si inicializas un FragmentScenario con un estado DESTROYED, se arrojará una excepción IllegalArgumentException. (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 de TRANSIT_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 elemento hide(). (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 de ClassLoader. ¡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 estado Lifecycle en INITIALIZING, siempre que el fragmento no se haya movido a CREATED. (b/159662173)

Cambios en la API

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() en CREATED, 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 un FragmentManager no nulo siempre se considerarán activos. (aosp/1422346)
  • Los efectos predeterminados de los fragmentos TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE y TRANSIT_FRAGMENT_FADE ahora usan Animator, en lugar de Animation. (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 sobre Animations, 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 de Transition o aquellos en los que un Animator y un Transition en un fragmento individual se ejecuten a la vez. (b/149569323)
  • Ahora se ejecutan los elementos enterTransition y exitTranstion 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 a STARTED 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 a findFragmentById() o findFragmentByTag() desde la devolución de llamada onAttachFragment(). (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 las Transition 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 objeto ActivityResultLauncher, en el método de ciclo de vida de onCreate() de un fragmento. (b/161464278)
  • La llamada a registerForActivityResult() después de onCreate() 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 API OnContextAvailableListener presentada en Activity 1.2.0-alpha08 para restablecer el estado de FragmentManager. Los objetos de escucha agregados a las subclases de FragmentActivity se ejecutarán después de este objeto de escucha. (I513da)

Correcciones de errores

  • Ahora se pasa ActivityOptions cuando se usa startIntentSenderForResult(). (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 de onResume() ocasiona que FragmentManager 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 operaciones hide() y show() 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 de CREATED, STARTED o RESUMED, en lugar de trasladar siempre el elemento Fragment al estado RESUMED. (b/159662750)
  • Se agregó una alternativa a la API de FragmentScenario del objeto onFragment en forma del método withFragment 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 objeto setMaxLifecycle() para implementar el parámetro moveToState(), 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 objeto ViewTreeSavedStateRegistryOwner 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() en FragmentActivity y Fragment dejó de estar disponible. Se agregó un FragmentOnAttachListener nuevo para brindar una alternativa más flexible, que permite la delegación de onAttachFragment() 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 otro DialogFragment 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

Cambios en la API

  • Las API de setFragmentResult() y setFragmentResultListener() ahora toman un valor no nulo de Bundle y FragmentResultListener, respectivamente. Para borrar de forma explícita un objeto de escucha o un resultado establecido previamente, usa los nuevos métodos clearFragmentResult() y clearFragmentResultListener(). (b/155416778)
  • Las extensiones de Kotlin setFragmentResultListener() que toman un valor lambda ahora están identificadas como inline. (b/155323404)

Cambios en el comportamiento

  • Los objetos startActivityForResult(), startIntentSenderForResult() y requestPermissions que habían dejado de estar disponibles en Fragment ahora usan ActivityResultRegistry de forma interna, lo que quita la restricción sobre el uso de los bits inferiores (inferiores a 0xFFFF) 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) y DialogFragment(@LayoutRes int) para aclarar que deben llamarse desde el constructor sin argumentos de tus subclases cuando se usa el FragmentFactory 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 menos STARTED. (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() y requestPermissions()/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étodo prepareCall() a registerForActivityResult(). (aosp/1278717)

Correcciones de errores

  • El getViewLifecycleOwner() del fragmento ahora se detiene antes de llamar a onSaveInstanceState(), 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 de DialogFragment con FragmentContainerView. (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 de Fragment ahora son final. (b/152439361)

Correcciones de errores

  • Se corrigió una regresión que se introdujo en Fragment 1.3.0-alpha02 cuando se usaba BottomSheetDialogFragment. (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 de FragmentLiveDataObserve en las clases DialogFragment, 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 usar this o viewLifecycleOwner para las llamadas a observe (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 Activity 1.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 Activity 1.2.0-alpha02 para controlar los flujos startActivityForResult() + onActivityResult() y requestPermissions() + 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 que onCreateView() 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 en onViewCreated() (al que se llama inmediatamente antes de onActivityCreated()), mientras que el resto del código de inicialización debe estar en onCreate(). Para recibir una devolución de llamada específicamente cuando el onCreate() de la actividad está completo, se debe registrar un LifeCycleObserver en el Lifecycle de la actividad en onAttach(), y se lo debe quitar una vez que se reciba la devolución de llamada de onCreate(). (b/144309266)

Correcciones de errores

  • A partir de Fragment 1.2.3: se corrigió un error de DialogFragment que ocasionaba un StackOverflowError cuando se llamaba a getLayoutInflater() desde onCreateDialog(). (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 de UseRequireInsteadOfGet 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 un UnsupportedOperationException 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

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 de ViewModel y la devolución de llamada de onCleared() que recibe). (b/143911815)
  • Con el lanzamiento de ViewPager2 1.0.0, las clases FragmentPagerAdapter y FragmentStatePagerAdapter para interactuar con ViewPager 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 de Fragment. De esta manera, se corrige una regresión que se introdujo en Fragment 1.2.1. (b/149665169
  • Las reglas de lint de require___() que se agregaron en Fragment 1.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 una UnsupportedOperationException 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 a onSaveInstanceState(), lo que refleja el comportamiento del ciclo de vida del fragmento. Anteriormente, se lanzó en Fragment 1.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 Fragment 1.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 clases DialogFragment, 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 usar this o viewLifecycleOwner para las llamadas a observe. (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 un StackOverflowError cuando se llamaba a getLayoutInflater() desde onCreateDialog(). (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 una UnsupportedOperationException 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 como LifecycleOwner para las llamadas a OnBackPressedDispatcher en onCreateView(), onViewCreated() y onActivityCreated(). (b/142117657)
  • Se agregó una nueva verificación de lint que confirma que estás usando la debugImplementation correcta cuando utilizas el artefacto fragment-testing. (b/141500106)
  • Los fragmentos ahora sugieren el uso de los métodos require___() asociados para mensajes de error más descriptivos en lugar de checkNotNull(get___()), requireNonNull(get___()) o get___()!! para todas las APIs de Fragment que incluyen un equivalente de get y require. (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 utiliza observe a fin de controlar también la versión del método de extensión de livedata-ktx de observe. (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 y replace que toman una instancia Class (o las versiones reificadas de Kotlin) ahora tienen su constructor predeterminado mantenido por ProGuard. (b/148181315)
  • FragmentStatePagerAdapter y FragmentPagerAdapter ya no detectan las excepciones que arroja FragmentManager cuando se ejecuta finishUpdate(). (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 a onInflate() antes de onCreate() cuando está en el diseño. (aosp/1215856)
  • Una llamada a toString() en una instancia de FragmentManager ya no arroja una NullPointerException cuando ya se destruyó la Activity. (b/148189412)

Cambios de dependencia

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 de FrameLayout y otros diseños. También admite los mismos class, android:name y android:tag opcional como la etiqueta de <fragment>, pero usa un elemento FragmentTransaction 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 Transition 1.3.0) antes de llamar a onDestroyView().
  • add() y replace() basados en clases: Se agregaron nuevas sobrecargas de add() y replace() en FragmentTransaction, que toman una Class<? extends Fragment> y un Bundle opcional de argumentos. Estos métodos usan tu FragmentFactory para construir una instancia del fragmento que se agregará. También se agregaron a fragment-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 usan by viewModels(), by activityViewModels(), el constructor ViewModelProvider o un objeto ViewModelProviders.of() con un fragmento.
  • Nuevas comprobaciones de Lint: Se agregó una nueva verificación de Lint que garantiza que utilices getViewLifecycleOwner() al observar LiveData desde onCreateView(), onViewCreated() o onActivityCreated().
  • Baja de getFragmentManager(): Los métodos getFragmentManager() y requireFragmentManager() de Fragment dejaron de estar disponibles y se reemplazaron por un solo método getParentFragmentManager(), que muestra el valor FragmentManager no nulo al que se agrega el fragmento (puedes usar isAdded() para determinar si es seguro hacer la llamada).
  • Baja de FragmentManager.enableDebugLogging(): el método FragmentManager.enableDebugLogging estático dejó de estar disponible. FragmentManager ahora respeta Log.isLoggable() para la etiqueta FragmentManager, lo que te permite habilitar el registro DEBUG o VERBOSE 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 o android:name en una FragmentContainerView, y esto requiere que agregues manualmente una regla de conservación para cada clase de fragmento (b/142601969).
  • Cuando agregas un objeto NavHostFragment mediante una class o android:name en XML con FragmentContainerView, no puedes usar el elemento findNavController() en onCreate() 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 a onViewCreated() 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 a CREATED, 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 y TRANSIT_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() y getFragmentFactory() para aclarar que la configuración de un objeto FragmentFactory también afectará a los FragmentManagers secundarios. (aosp/1170095)

Cambios de dependencia

  • Los fragmentos ahora dependen de Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 y Activity 1.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 observar LiveData de onCreateView(), onViewCreated() o onActivityCreated() (introducido en Fragment 1.2.0-rc01) ahora usa viewLifecycleOwner de sintaxis de acceso a la propiedad de Kotlin, en lugar de getViewLifecycleOwner() (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 atributo class además de android: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 observar LiveData desde onCreateView(), onViewCreated() o onActivityCreated() (b/137122478).

Correcciones de errores

  • Las devoluciones de llamada de onDismiss y onCancel en DialogFragment ahora garantizan que la DialogInterface que se les pasa no es nula y que getDialog() muestra que no es nulo cuando se ejecutan. (b/141974033)
  • FragmentContainerView ahora agrega el fragmento que definen la class o el android:name como parte de la inflación, lo que asegura que findFragmentById() y findFragmentByTag() funcionen posteriormente de inmediato. (b/142520327)
  • Se corrigió una IllegalStateException en FragmentContainerView que se producía debido al estado que se guardaba. (b/142580713)
  • Se corrigió una UnsupportedOperationException en FragmentContainerView que se produce cuando la clase FragmentContainerView está ofuscada (b/142657034).

Errores conocidos

  • ProGuard no guarda automáticamente los fragmentos a los que se hace referencia mediante el atributo class o android:name en una FragmentContainerView, y esto requiere que agregues manualmente una regla de conservación para cada clase de fragmento Inhabilitamos la regla de Lint que sugiere pasar a FragmentContainerView hasta que esto se corrija mediante aapt2 (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 de FragmentContainerView e inutilizaba casos, como NavHostFragment (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 opcionales android:name y android:tag. A diferencia de la etiqueta <fragment>, FragmentContainerView usa una FragmentTransaction normal para agregar el fragmento inicial, lo que permite operaciones de FragmentTransaction adicionales en FragmentContainerView 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> por FragmentContainerView (b/139830056).

Correcciones de errores

  • Se corrigió un error ClassCastException que se producía cuando se usaba androidx.transition. (b/140680619)
  • Al utilizar Transition 1.3.0-beta01, los fragmentos ahora esperan las transiciones androidx.transition (además de las transiciones y las animaciones de framework, que se corrigieron en Fragment 1.2.0-alpha03 y Fragment 1.2.0-alpha02, respectivamente) para terminar antes de enviar onDestroyView(). (aosp/1119841)
  • Al utilizar Transition 1.3.0-beta01, los fragmentos ahora cancelan correctamente las transiciones androidx.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 usar FragmentContainerView. (b/140361893)
  • El artefacto fragment-testing ahora depende de AndroidX Test 1.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 de FragmentContainerView e inutilizan casos, como NavHostFragment (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() y requireFragmentManager() de Fragment dejaron de estar disponibles y se reemplazaron por un solo método getParentFragmentManager(), que muestra el valor FragmentManager no nulo al que se agregó el fragmento (puedes usar isAdded() para determinar si es seguro realizar la llamada) (b/140574496)
  • El método FragmentManager.enableDebugLogging estático dejó de estar disponible. FragmentManager ahora respeta Log.isLoggable() para la etiqueta FragmentManager, lo que te permite habilitar el registro DEBUG o VERBOSE 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

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 enviar onDestroyView() (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 usa by viewModels(), by activityViewModels(), el constructor ViewModelProvider o ViewModelProviders.of() con un Fragment. (b/135716331)
  • Se actualizaron las animaciones predeterminadas que se reproducen al usar TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE y TRANSIT_FRAGMENT_FADE con setTransition en una FragmentTransaction 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 de FrameLayout, 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 en fragment-ktx (aosp/1090757).
  • Se agregaron nuevas sobrecargas de add() y replace() en FragmentTransaction, que toman una Class<? extends Fragment> y un Bundle opcional de argumentos. Estos métodos usan tu FragmentFactory para construir una instancia del fragmento que se agregará. También se agregó a fragment-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 de Fragment. (b/127272564)
  • Las API relacionadas con el título de la ruta de navegación en FragmentTransaction y FragmentManager.BackStackEntry dejaron de estar disponibles. (b/138252944)
  • El método setTransitionStyle en FragmentTransaction dejó de estar disponible (aosp/1011537).
  • Muchos de los métodos en FragmentManager ya no son abstract. FragmentManager en sí mismo sigue siendo abstract y no se debería instanciar ni extender directamente; debe continuar obteniendo solo una instancia existente de getSupportFragmentManager(), 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 a postponeEnterTransition() 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 en FragmentPagerAdapter y FragmentStatePagerAdapter 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 usaban FragmentPagerAdapter y FragmentStatePagerAdapter 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 a onViewCreated(), lo que garantiza que tu vista siempre tenga las inserciones correctas. (b/135945162)

Correcciones de errores

  • Se corrigió una NullPointerException cuando aparecía una FragmentTransaction que usaba setPrimaryNavigationFragment() antes de replace() (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 clase FragmentScenario 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 un FragmentManager 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 y by 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 una FragmentTransaction. Esto reemplaza setUserVisibleHint(), que dejó de estar disponible. FragmentPagerAdapter y FragmentStatePagerAdapter 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 en FragmentActivity que toma un ID de R.layout, que indica el diseño que se debe establecer como vista de contenido como alternativa para invocar a setContentView() en onCreate(). 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 en Fragment que toma un ID de R.layout, que indica el diseño que se debe usar para este fragmento como alternativa para anular onCreateView(). El diseño inflado se puede configurar en onViewCreated().
  • 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 y FragmentStatePagerAdapter 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() o hide() mientras se está ejecutando la transición (b/133385058).
  • Se corrigió una NullPointerException cuando aparecía una FragmentTransaction que usaba setPrimaryNavigationFragment() antes de replace() (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 con STARTED, RESUMED, PAUSED, STOPPED y DESTROYED) para fragmentos anidados. (b/133497591)
  • Las instancias de OnBackPressedCallback registradas en el elemento onCreate() 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 a startPostponedEnterTransition(). (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 un Bundle. (aosp/953856)
  • Cambio rotundo: se cambiaron los nombres de las constantes RESUME_ONLY_CURRENT_FRAGMENT y USE_SET_USER_VISIBLE_HINT de FragmentPagerAdapter y FragmentStatePagerAdapter a BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT y BEHAVIOR_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 una FragmentTransaction. Esto reemplaza setUserVisibleHint(), que dejó de estar disponible. FragmentPagerAdapter y FragmentStatePagerAdapter tienen un nuevo constructor que te permite usar el nuevo comportamiento. (b/129780800).

Cambios en la API

  • moveToState(STARTED) en FragmentScenario 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á a onCreateView() 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 constructor contentLayoutId de FragmentActivity o AppCompatActivity. (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 el FragmentManager 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 y FragmentActivity 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 de instantiate 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() y setPrimaryNavigationFragment() con un fragmento adjunto a un FragmentManager diferente, se muestra una IllegalStateException, en lugar de una falla en silencio (aosp/904301).

Correcciones de errores

  • Ahora, onNewIntent para FragmentActivity se marca correctamente con @CallSuper. (b/124120586)
  • Se solucionó un problema por el que se podía llamar dos veces a onDismiss() de DialogFragment cuando se usaba getDialog().dismiss() o getDialog().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 anular onCreateView(). Se recomienda consultar el trabajo relacionado en onViewCreated() (aosp/837619).
  • fragment-testing ahora depende de la versión estable de androidx.test:core-ktx 1.1.0. (b/121209673)
  • Ahora puedes usar openActionBarOverflowOrOptionsMenu con FragmentScenario 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 una IllegalStateException (b/121196360).
  • Se agregó una nota que indica que no se deberían anular getLifecycle(), getViewLifecycleOwner() y getViewLifecycleOwnerLiveData(), 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 a setTargetFragment(). (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 obtener ViewModelStoreOwner, lo que te permite pasar el fragmento superior u otro ViewModelStoreOwner personalizado con código como val viewModel: MyViewModel by viewModels(::requireParentFragment). (b/119050253)

Cambios en la API

  • FragmentScenario ahora te permite especificar un tema, como Theme.AppCompat. (b/119054431) Este es un cambio rotundo.
  • Se agregó un método requireView() que muestra una @NonNull View o arroja una IllegalStateException. (b/120241368)
  • Se agregó un método requireParentFragment() que muestra un @NonNull Fragment o arroja una IllegalStateException. (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 una FragmentFactory. (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 cualquier FragmentManager 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 de androidx.test:core:1.0.0-beta01, en lugar del androidx.test:core:1.0.0 correcto.