Fragment

Guia do usuário  Exemplo de código (link em inglês)
Segmente seu app em várias telas independentes hospedadas em uma atividade.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
29 de setembro de 2021 1.3.6 - - 1.4.0-alpha10

Declarar dependências

Para adicionar uma dependência a Fragment, é preciso adicionar o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

Groovy

dependencies {
    def fragment_version = "1.3.6"

    // Java language implementation
    implementation "androidx.fragment:fragment:$fragment_version"
    // Kotlin
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    // Testing Fragments in Isolation
    debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}

Kotlin

dependencies {
    val fragment_version = "1.3.6"

    // Java language implementation
    implementation("androidx.fragment:fragment:$fragment_version")
    // Kotlin
    implementation("androidx.fragment:fragment-ktx:$fragment_version")
    // Testing Fragments in Isolation
    debugImplementation("androidx.fragment:fragment-testing:$fragment_version")
}

Para ver mais informações sobre dependências, consulte Adicionar dependências de build.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes nesta biblioteca antes de criar um novo. Adicione seu voto a um problema existente clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.4.0

Versão 1.4.0-alpha10

29 de setembro de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha10, androidx.fragment:fragment-ktx:1.4.0-alpha10 e androidx.fragment:fragment-testing:1.4.0-alpha10. A versão 1.4.0-alpha10 contém estas confirmações.

Lint

  • O alerta de lint DetachAndAttachFragmentInSameFragmentTransaction foi adicionado para detectar chamadas de detach() e attach() no mesmo Fragment na mesma FragmentTransaction, já que essas operações complementares são canceladas quando feitas na mesma transação. É necessário as separar em transações distintas para funcionarem (aosp/1832956, b/200867930).
  • O erro de lint FragmentAddMenuProvider foi adicionado para corrigir os usos do ciclo de vida do fragmento para o ciclo de vida da visualização do fragmento ao usar a API addMenuProvider do MenuHost (aosp/1830457, b/200326272).

Atualizações da documentação

  • Agora as mensagens de descontinuação das APIs gerenciadas pelas APIs Activity Result, como startActivityForResult, startIntentSenderForResult, onActivityResult, requestPermissions e onRequestPermissionsResult, agora oferecem mais detalhes (cce80f).
  • As mensagens de descontinuação do método onActivityCreated() no Fragment e no DialogFragment agora oferecem mais detalhes (224db4).

Versão 1.4.0-alpha09

15 de setembro de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha09, androidx.fragment:fragment-ktx:1.4.0-alpha09 e androidx.fragment:fragment-testing:1.4.0-alpha09. A versão 1.4.0-alpha09 contém estas confirmações.

Novos recursos

  • Agora você pode chamar clearBackStack(name) para limpar qualquer estado salvo anteriormente com saveBackStack(name) (I70cd7).

Mudanças na API

  • A classe FragmentContainerView foi reescrita em Kotlin garantindo que a função getFragment respeite corretamente a nulidade (If694a, b/189629145).
  • FragmentStrictMode agora é escrito em Kotlin (I11767, b/199183506).

Correções de bugs

  • Um problema em que o estado de um fragmento que era adicionado usando setReorderingAllowed(true) e removido imediatamente antes da execução de transações pendentes não era limpo corretamente foi corrigido (I8ccb8).

Versão 1.4.0-alpha08

1º de setembro de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha08, androidx.fragment:fragment-ktx:1.4.0-alpha08 e androidx.fragment:fragment-testing:1.4.0-alpha08. A versão 1.4.0-alpha08 contém estas confirmações.

Correções de bugs

  • Melhoria na verificação de lint UseRequireInsteadOfGet para lidar melhor com parênteses redundantes (I2d865).
  • Melhoria na verificação de lint UseGetLayoutInflater para gerenciar outros casos extremos (Ie5423).

Versão 1.4.0-alpha07

18 de agosto de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha07, androidx.fragment:fragment-ktx:1.4.0-alpha07 e androidx.fragment:fragment-testing:1.4.0-alpha07 sem mudanças importantes. A versão 1.4.0-alpha07 contém estas confirmações.

Versão 1.4.0-alpha06

4 de agosto de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha06, androidx.fragment:fragment-ktx:1.4.0-alpha06 e androidx.fragment:fragment-testing:1.4.0-alpha06. A versão 1.4.0-alpha06 contém estas confirmações.

Correções de bugs

  • Um problema com várias backstacks em que, ao alternar rapidamente entre elas, era exibido como uma IllegalStateException ao restaurar uma FragmentTransaction ou como uma segunda cópia de um fragmento em exibição foi corrigido (I9039f).
  • Um problema em que o FragmentManager mantinha uma cópia do estado salvo anteriormente pelo método saveBackStack(), mesmo depois dele ter sido restaurado foi corrigido (Ied212).
  • O método dismissAllowingStateLoss() do DialogFragment não falha mais quando você o chama depois que o estado é salvo ao adicionar especificamente o DialogFragment com o método show(FragmentTransaction, String) (I84422).

Versão 1.4.0-alpha05

21 de julho de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha05, androidx.fragment:fragment-ktx:1.4.0-alpha05 e androidx.fragment:fragment-testing:1.4.0-alpha05. A versão 1.4.0-alpha05 contém estas confirmações.

Correções de bugs

  • Da API Fragment 1.3.6: a visualização do fragmento agora é definida corretamente como GONE ao usar o método hide() quando a visualização raiz define transitionGroup=”true” (aosp/1766655, b/193603427).
  • Da API Fragment 1.3.6: a FragmentActivity agora sempre desbloqueia o estado salvo como a primeira operação em callbacks do ciclo de vida que ela substitui (I6db7a).

Atualização de dependências

Versão 1.4.0-alpha04

30 de junho de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha04, androidx.fragment:fragment-ktx:1.4.0-alpha04 e androidx.fragment:fragment-testing:1.4.0-alpha04. A versão 1.4.0-alpha04 contém estas confirmações.

Mudanças na API

  • FragmentManager agora usa SavedStateRegistry internamente para salvar o próprio estado. Os métodos saveAllState() e restoreSavedState() também foram descontinuados em FragmentController. Se você estiver usando o FragmentController para hospedar fragmentos fora da FragmentActivity, implemente FragmentHostCallbacks em SavedStateRegistryOwner (Iba68e, b/188734238).

Correções de bugs

  • Um problema em que a chamada para saveBackStack() como parte da compatibilidade com várias backstacks falhava ao ser executada ao mesmo tempo que uma FragmentTransaction que usava replace() era executada foi corrigido (I73137).
  • Uma NullPointerException que ocorria após a restauração manual de uma backstack salva que continha várias transações ao usar a API restoreBackStack() para compatibilidade com várias backstacks foi corrigida. Isso também corrigiu um problema em que setReorderingAllowed(true) não era verificado para todas as transações (I8c593).
  • Correção de um problema em que FragmentManager continuaria restaurando estados de fragmentos salvos anteriormente, mesmo depois que fossem removidos do FragmentManager, fazendo com que o estado salvo aumentasse continuamente (I1fb8e).

Versão 1.4.0-alpha03

16 de junho de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha03, androidx.fragment:fragment-ktx:1.4.0-alpha03 e androidx.fragment:fragment-testing:1.4.0-alpha03. A versão 1.4.0-alpha03 contém estas confirmações.

Novos recursos

  • Todas as classes Fragment StrictMode Violation foram atualizadas com mensagens de erro mais detalhadas que explicam os detalhes da violação (b/187871638).
    • FragmentTagUsageViolation agora contém uma mensagem de erro mais detalhada com o contêiner pai ao qual o fragmento teria sido adicionado (Ic33a7).
    • WrongFragmentContainerViolation agora tem uma mensagem de erro mais detalhada que inclui o contêiner ao qual o fragmento estava sendo adicionado (Ib55f8).
    • As classes de caso de uso de TargetFragmentUsageViolation agora têm mensagens de erro mais detalhadas para incluir o fragmento que causa a violação e qualquer outra informação contida (Icc6ac).
    • As classes que estendem RetainInstanceUsageViolation agora têm mensagens de erro mais detalhadas que incluem o fragmento que causa a violação (I6bd55).
    • FragmentReuseViolation agora tem uma mensagem de erro mais detalhada que inclui o código anterior do fragmento (I28ce2).
    • SetUserVisibleHintViolation agora tem uma mensagem de erro mais detalhada que inclui como a dica visível do usuário estava sendo definida (Ib2d5f).

Mudanças de comportamento

  • A restrição sobre chamar fitsSystemWindows em uma FragmentContainerView foi revertida. Isso não causa mais falhas no seu app (6b8ddd, b/190622202).

Correções de bugs

  • Do Fragment 1.3.5: correção de uma regressão em transições de elementos compartilhados introduzida no Fragment 1.3.4 por aosp/1679887. Os fragmentos agora processam corretamente os grupos de transição (definidos diretamente por transitionGroup="true" ou indiretamente por meio de transitionName ou background), e os elementos compartilhados não geram mais IndexOutOfBoundsExceptions (I16484, b/188679569, b/188969304).
  • O FragmentManager não falhará mais quando você tentar ocultar um fragmento removido (I573dd, b/183634730).
  • A verificação de lint OnCreateDialogIncorrectCallback não falhará mais ao avaliar uma variável de nível superior (0a9efa, b/189967522).

Versão 1.4.0-alpha02

2 de junho de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha02, androidx.fragment:fragment-ktx:1.4.0-alpha02 e androidx.fragment:fragment-testing:1.4.0-alpha02. A versão 1.4.0-alpha02 contém estas confirmações.

Novos recursos

  • Agora, o FragmentStrictMode sempre registrará violações quando a geração de registros for ativada pelo FragmentManager, independentemente da política atual de modo restrito usada (I02df6, b/187872638).
  • FragmentStrictMode agora é compatível com a isenção de classes Fragment específicas de Violations no modo restrito, possibilitando que essa classe ignore penalidades (Ib4e5d, b/184786736).

  • A classe FragmentStrictMode Violation foi ampliada para adicionar informações de estrutura com base em cada violação. Assim, é possível verificar exatamente o motivo que causou a violação e o fragmento responsável (If5118, b/187871150). Cada Violation contém o seguinte:

    • WrongFragmentContainerViolation agora contém o ViewGroup a que o Fragment estava tentando ser adicionado (I83c75, b/187871150).
    • TargetFragmentUsageViolation foi ampliada em, SetTargetFragmentUsageViolation, GetTargetFragmentUsageViolation e GetTargetFragmentRequestCodeUsageViolation, com SetTargetFragmentUsageViolation contendo o fragmento de destino e o código de solicitação (I741b4, b/187871150).
    • SetUserVisibleHintViolation agora contém o valor booleano transmitido para setUserVisibleHint() (I00585, b/187871150).
    • FragmentTagUsageViolation agora contém o ViewGroup em que a tag <fragment> estava tentando inflar um fragmento (I5dbbc, b/187871150).
    • FragmentReuseViolation agora contém o ID exclusivo da instância anterior do Fragment que causou a violação (I0544d, b/187871150).
    • RetainInstanceUsageViolation agora é abstrata e tem duas subclasses, SetRetainInstanceUsageViolation e GetRetainInstanceUsageViolation, representando os dois tipos de casos de violação (Ic81e5, b/187871150).

Mudanças de comportamento

  • FragmentContainerView agora gera uma exceção ao tentar mudar o atributo fitsSystemWindow de maneira programática ou por XML. Os encartes precisam ser tratados pela visualização de cada fragmento individual (Ie6651, b/187304502).

Versão 1.4.0-alpha01

18 de maio de 2021

Lançamento de androidx.fragment:fragment:1.4.0-alpha01, androidx.fragment:fragment-ktx:1.4.0-alpha01 e androidx.fragment:fragment-testing:1.4.0-alpha01. A versão 1.4.0-alpha01 contém estas confirmações.

Novos recursos

  • A FragmentContainerView agora oferece um método getFragment() que retorna o fragmento que foi adicionado mais recentemente ao contêiner. Esse método usa a mesma lógica de findFragmentById() com o ID da FragmentContainerView, mas permite encadear a chamada (Ife17a, b/162527857).

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} foi adicionado para especificar se a animação padrão de transição de atividades do tema usado será ativada na transição de fragmentos (I46652).

Várias backstacks

O FragmentManager mantém uma backstack composta de transações de fragmentos que usaram addToBackStack(). Isso permite exibir essas transações e retornar ao estado anterior usando os mecanismos para salvar o estado com fragmentos e fazer com que os fragmentos restaurem o estado corretamente.

Esta versão expande esses mecanismos fornecendo duas novas APIs do FragmentManager: saveBackStack(String name) e restoreBackStack(String name). Essas APIs usam o mesmo name de addToBackStack() para salvar o estado da FragmentTransaction e o estado de cada fragmento adicionado a essas transações. Também permitem restaurar as transações e os fragmentos com o estado delas. Assim, é possível "alternar" de fato entre várias backstacks, salvando a atual e restaurando uma salva anteriormente.

O saveBackStack() opera da mesma forma que popBackStack(): ele é assíncrono e faz com que todas as transações de fragmento voltem a esse nome específico para serem revertidas ("exibidas"). Também faz com que os fragmentos adicionados sejam destruídos e removidos. Mas esses comandos são diferentes em alguns pontos significativos:

  • O saveBackStack() é sempre inclusivo.
  • Ao contrário de popBackStack(), que exibirá todas as transações na backstack se o nome especificado não for encontrado na backstack ou se um nome nulo for fornecido, o saveBackStack() não fará nada se você não confirmar antes uma transação de fragmento usando addToBackStack() com exatamente esse nome não nulo.
  • O estado de todos os fragmentos adicionados dessas transações é salvo. Isso significa que o estado de visualização de cada fragmento é armazenado. O onSaveInstanceState() de cada fragmento é chamado e restaurado. Todas as instâncias de ViewModel associadas a esses fragmentos são mantidas (e onCleared() não é chamado nelas).

As transações de fragmento que podem ser usadas com saveBackStack() precisam atender a alguns critérios:

  • Todas as transações de fragmentos precisam usar setReorderingAllowed(true) para garantir que sejam restauradas como uma única operação atômica.
  • O conjunto de transações salvas precisa ser autossuficiente (ou seja, ele não precisa referenciar explicitamente nenhum fragmento fora desse conjunto) para ser restaurado depois, independentemente das mudanças feitas na backstack no tempo intermediário.
  • Nenhum fragmento salvo pode ser retido nem ter um fragmento retido no conjunto de transição de fragmentos filhos. Isso garante que o FragmentManager não retorne nenhuma referência a fragmentos salvos depois que a backstack for salva.

Da mesma forma que o saveBackStack(), o restoreBackStack() não fará nada se você não tiver chamado saveBackStack() com o mesmo nome anteriormente (b/80029773).

Fragmento StrictMode

As APIs FragmentStrictMode fornecem verificações no momento da execução para checar se o app ou as bibliotecas de que você depende não estão chamando APIs de fragmentos descontinuadas. Quando uma violação é detectada, você pode imprimir uma mensagem de registro, acionar seu listener personalizado ou causar uma falha no app. A FragmentStrictMode.Policy que controla quais verificações são ativadas e quais "penalidades" são acionadas pode ser definida em um FragmentManager usando o novo método setStrictModePolicy(). A política se aplica a esse FragmentManager e, de forma transitória, aos gerenciadores de fragmentos filhos que não definem a própria política exclusiva (#123, #131, #150, b/143774122).

  • O detectFragmentReuse() detecta se uma instância de Fragment removida antes está sendo adicionada novamente a um FragmentManager. Nunca interaja com uma instância de Fragment nem mantenha uma referência a ela depois que ela é destruída e removida de um FragmentManager (#142, b/153738653).
  • O detectFragmentTagUsage() detecta quando você está usando a tag <fragment> no XML de layout. Sempre use a FragmentContainerView ao inflar fragmentos como parte do layout (#141, b/153738235).
  • O detectWrongFragmentContainer() detecta quando você adiciona um fragmento a um contêiner que não é uma FragmentContainerView. Sempre use a FragmentContainerView como contêiner de fragmentos no seu layout (#146, b/181137036).
  • O detectRetainInstanceUsage() detecta quando você usa as APIs setRetainInstance() ou getRetainInstance() descontinuadas (#140, b/153737954).
  • O detectSetUserVisibleHint() detecta quando você usa a API setUserVisibleHint() descontinuada (#136, b/153738974).
  • O detectTargetFragmentUsage() detecta quando você usa as APIs setTargetFragment(), getTargetFragment() ou getTargetRequestCode() descontinuadas (#139, b/153737745).

Mudanças na API

Novas verificações de lint

  • A verificação de lint UseGetLayoutInflater agora avisa quando usa LayoutInflater.from(Context) em um DialogFragment. Use sempre o método getLayoutInflater() do fragmento da caixa de diálogo para receber o apropriado para LayoutInflater (#156, b/170781346).
  • A verificação de lint DialogFragmentCallbacksDetector agora avisa quando chama o setOnCancelListener ou o setOnDismissListener no método onCreateDialog() de um DialogFragment. Esses listeners pertencem ao DialogFragment, e é preciso modificar onCancel() e onDismiss() para receber esses callbacks (#171, b/181780047, b/187524311).

Correções de bugs

  • A partir do Fragment 1.3.4: foi feita a correção de uma regressão introduzida no Fragment 1.3.3 ao usar a API ViewTreeViewModelStoreOwner.get() com o ViewModelProvider ou o método viewModel() do Jetpack Compose dentro de um fragmento. Esses casos de uso agora utilizarão corretamente a ViewModelProvider.Factory fornecida pelo fragmento se ela modificar getDefaultViewModelProviderFactory() (como os fragmentos com anotações do @AndroidEntryPoint fazem ao usar o Hilt). Se você não modificar esse método, uma SavedStateViewModelFactory que salva e restaura o estado junto com a visualização do fragmento será criada como a fábrica padrão (I5cbfa, b/186097368).
  • A partir do Fragment 1.3.4: ao usar a FragmentContainerView na API 29, os encartes não serão mais enviados indefinidamente, corrigindo problemas com instâncias da BottomNavigationBar e do FloatingActionButton (I1bb78, b/186012452).
  • A partir do Fragment 1.3.4: agora você pode recuperar seu Parcelable do pacote de resultados do fragmento após a interrupção do processo (I65932, b/187443158).
  • A partir do Fragment 1.3.4: ao fazer uma transição de elemento compartilhado em um ViewGroup, se ele tiver o transitionGroup definido como falso, a transição será feita corretamente (I99675).

Contribuição externa

Versão 1.3.6

Versão 1.3.6

21 de julho de 2021

Lançamento de androidx.fragment:fragment:1.3.6, androidx.fragment:fragment-ktx:1.3.6 e androidx.fragment:fragment-testing:1.3.6. A versão 1.3.6 contém estas confirmações.

Correções de bugs

  • Da API Fragment 1.4.0-alpha03: o FragmentManager não falhará mais quando você tentar ocultar um fragmento de remoção (I573dd, b/183634730).
  • A visualização de fragmento agora é definida corretamente como GONE ao usar o método hide() quando a visualização raiz define transitionGroup=”true” (aosp/1766655, b/193603427).
  • Agora, FragmentActivity sempre desbloqueia o estado salvo como a primeira operação nos callbacks de ciclo de vida que ela substitui (I6db7a).

Atualização de dependências

Versão 1.3.5

Versão 1.3.5

16 de junho de 2021

Lançamento de androidx.fragment:fragment:1.3.5, androidx.fragment:fragment-ktx:1.3.5 e androidx.fragment:fragment-testing:1.3.5. A versão 1.3.5 contém estas confirmações.

Correções de bugs

  • Correção de uma regressão em transições de elementos compartilhados introduzidas no Fragment 1.3.4 por aosp/1679887. Os fragmentos agora processam corretamente os grupos de transição (definidos diretamente por transitionGroup="true" ou indiretamente por meio de transitionName ou background), e os elementos compartilhados não geram mais IndexOutOfBoundsExceptions (I16484, b/188679569, b/188969304).

Versão 1.3.4

Versão 1.3.4

18 de maio de 2021

Lançamento de androidx.fragment:fragment:1.3.4, androidx.fragment:fragment-ktx:1.3.4 e androidx.fragment:fragment-testing:1.3.4. A versão 1.3.4 contém estas confirmações.

Correções de bugs

  • Foi corrigida uma regressão introduzida no Fragment 1.3.3 ao usar a API ViewTreeViewModelStoreOwner.get() com o ViewModelProvider ou o método viewModel() do Jetpack Compose dentro de um fragmento ao usar o Hilt. Esses casos de uso agora utilizarão corretamente a ViewModelProvider.Factory fornecida pelo fragmento se ela modificar getDefaultViewModelProviderFactory() (como os fragmentos com anotações do @AndroidEntryPoint fazem). Se você não modificar esse método, uma SavedStateViewModelFactory que salva e restaura o estado junto com a visualização do fragmento será criada como a fábrica padrão (I5cbfa, b/186097368).
  • Ao usar a FragmentContainerView na API 29, os encartes não serão mais enviados indefinidamente, corrigindo problemas com instâncias da BottomNavigationBar e do FloatingActionButton (I1bb78, b/186012452).
  • Agora você pode recuperar seu Parcelable do pacote de resultados do fragmento após a interrupção do processo (I65932, b/187443158).
  • Ao fazer uma transição de elemento compartilhado em um ViewGroup, se ele tiver o transitionGroup definido como falso, a transição será feita corretamente (I99675).

Versão 1.3.3

Versão 1.3.3

21 de abril de 2021

Lançamento de androidx.fragment:fragment:1.3.3, androidx.fragment:fragment-ktx:1.3.3 e androidx.fragment:fragment-testing:1.3.3. A versão 1.3.3 contém estas confirmações.

Novos recursos

  • O SavedStateViewModelFactory agora funciona quando usado com o SavedStateRegistryOwner retornado pelo uso de ViewTreeSavedStateRegistryOwner.get() com a visualização do fragmento (I21acf, b/181577191).

Correções de bugs

  • Correção de uma regressão introduzida no fragmento 1.3.2, que fazia com que as animações popEnter não fossem executadas ao exibir um FragmentTransaction que incluísse uma operação setPrimaryNavFragment, como aquelas usadas por NavHostFragment (I38c87, b/183877426).
  • FragmentContainerView agora garante que cada Fragment receba um novo conjunto de WindowInsets, garantindo que cada fragmento agora possa consumir os encartes de forma independente (I63f68, b/172153900).
  • DialogFragment agora lida corretamente com casos em que um fragmento filho é adicionado a um contêiner que tem o mesmo código que um contêiner na sua classe Dialog personalizada, corrigindo problemas de hierarquia de visualização ao reutilizar códigos usados internamente por caixas de diálogo como BottomSheetDialog (Ie6279, b/180021387).
  • FragmentManager.dump() agora recua corretamente o primeiro fragmento na lista de fragmentos ativos (If5c33, b/183705451).

Novas correções de bugs do gerenciador de estado

  • O novo gerente de estado de fragmento agora lida corretamente com as transições de saída com operações de ocultação (I9e4de, b/184830265).

Versão 1.3.2

Versão 1.3.2

24 de março de 2021

Lançamento de androidx.fragment:fragment:1.3.2, androidx.fragment:fragment-ktx:1.3.2 e androidx.fragment:fragment-testing:1.3.2. A versão 1.3.2 contém estas confirmações.

Novas correções de bugs do gerenciador de estado

  • Ao executar as operações popBackStack() e commit() juntas, a última operação agora definirá a direção de todas as animações em vez de executar algumas animações de destaque e algumas animações de entrada (I7072e, b/181142246).
  • As visualizações de uma hierarquia de elementos compartilhados não terão mais o nome excluído durante uma transição de elemento compartilhado (I4d4a6, b/179934757).

Atualizações de dependência

  • O Fragment agora depende da Activity 1.2.2, corrigindo um problema com a verificação de lint InvalidFragmentVersionForActivityResult da Activity ao usar o Fragment 1.3.1 ou mais recente.
  • O Fragment agora depende do Lifecycle 2.3.1.

Versão 1.3.1

Versão 1.3.1

10 de Março de 2021

Lançamento de androidx.fragment:fragment:1.3.1, androidx.fragment:fragment-ktx:1.3.1 e androidx.fragment:fragment-testing:1.3.1. A versão 1.3.1 contém estas confirmações.

Novos recursos

  • As caixas de diálogo em um DialogFragment agora podem ter acesso aos proprietários da ViewTree da DecorationView, garantindo que DialogFragment possa ser usado com ComposeView (Ib9290, b/180691023).

Correções de bugs

  • Fragmentos inflados em uma atividade já RESUMED que usa FragmentContainerView agora são mostrados corretamente depois de uma mudança de configuração (Ie14c8, b/180538371).
  • Não há mais um } extra no final do fragmento toString() (I54705, b/177761088).
  • Os métodos substituídos em FragmentActivity agora herdam corretamente o método base javaDoc (I736ce, b/139548782).
  • Os documentos para setFragmentResult e setFragmentResultListener atualizaram os parâmetros para refletir que não aceitam mais anuláveis (I990ba, b/178348386).

Novas correções de bugs do gerenciador de estado

  • Correção de um vazamento de memória em fragmentos causado por mFocusedView (Ib4e9e, b/179925887).
  • Agora, os fragmentos chamam corretamente onCreateOptionsMenu ao usar mostrar/ocultar transações (I8bce8, b/180255554).
  • Fragmentos filhos com transições que iniciam antes do fragmento ser posicionado agora são RESUMED corretamente (Ic11e6, b/180825150).
  • Agora, os fragmentos inflados usando a tag <fragment> sempre resultarão em RESUMED (I452ac, I9fa49).

Atualizações de dependência

Versão 1.3.0

Versão 1.3.0

10 de fevereiro de 2021

Lançamento de androidx.fragment:fragment:1.3.0, androidx.fragment:fragment-ktx:1.3.0 e androidx.fragment:fragment-testing:1.3.0. A versão 1.3.0 contém estas confirmações.

Principais mudanças desde a versão 1.2.0

  • Novo gerenciador de estado: uma reprogramação interna considerável do FragmentManager corrigiu vários problemas relacionados ao envio de eventos, animações e transições do ciclo de vida e ao modo como os fragmentos adiados são processados.
  • Integração da API Activity Result: adição da compatibilidade com a API ActivityResultRegistry introduzida na Activity 1.2.0 para gerenciar startActivityForResult()+onActivityResult(), bem como fluxos requestPermissions()+onRequestPermissionsResult() sem substituir métodos no Fragment, além de fornecer hooks para testar esses fluxos. Veja a atualização de Como gerar resultados com uma atividade.

    • Esta versão corrige vários problemas relacionados a códigos de solicitação inválidos e o envio de solicitações de permissão que impedem a API Activity Result de funcionar em versões anteriores de FragmentActivity. É necessário fazer upgrade para o Fragment 1.3.0 para usar as APIs Activity Result em uma FragmentActivity ou AppCompatActivity.
  • API Fragment Result: adição da compatibilidade com a transmissão de resultados entre dois Fragments com novas APIs em FragmentManager. Isso funciona para fragmentos de hierarquia (pai/filho), DialogFragments e fragmentos no Navigation e garante que os resultados sejam enviados para seu Fragment apenas enquanto o estado dele for pelo menos STARTED. O uso das APIs de fragmento de destino foi suspenso em favor dessas novas APIs. Consulte Receber resultados usando a API Fragment Result.

  • FragmentOnAttachListener: o uso do callback onAttachFragment() em FragmentActivity e Fragment foi suspenso. Um novo FragmentOnAttachListener foi adicionado para oferecer uma alternativa mais flexível, permitindo a delegação de onAttachFragment() para listeners testáveis separados e compatibilidade com o acréscimo de um listener a FragmentManagers que não sejam o filho direto.

  • Melhorias de FragmentScenario: a classe FragmentScenario do artefato fragment-testing foi reescrita em Kotlin e recebeu várias melhorias:

    • FragmentScenario agora usa setMaxLifecycle() para implementar moveToState(), garantindo um comportamento consistente em todos os níveis da API e desacoplando o estado do fragmento da atividade implícita.
    • FragmentScenario agora é compatível com a configuração de um Lifecycle.State inicial para oferecer compatibilidade com a declaração do estado do fragmento antes da mudança para cada Lifecycle.State pela primeira vez.
    • Agora há uma alternativa para a API FragmentScenario de onFragment na forma do método Kotlin de extensão reificado withFragment que permite retornar um valor. Em especial, ele repete as exceções geradas no bloco especificado.
  • Compatibilidade com ViewTree: Fragment agora é compatível com as APIs ViewTreeLifecycleOwner.get(View), ViewTreeViewModelStoreOwner.get(View) e ViewTreeSavedStateRegistryOwner adicionadas no Lifecycle 2.3.0 e SavedState 1.1.0 para retornar o Fragment como o ViewModelStoreOwner e um SavedStateRegistryOwner e LifecycleOwner ligados ao ciclo de vida de visualização do fragmento ao usar uma View em um Fragment.

  • Mudanças de animação de TRANSIT_: os efeitos padrão de fragmento, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE, agora usam Animator em vez de Animation. Os recursos usados para criar esses animadores agora são particulares.

  • Suspensão do uso de setRetainInstance(): o uso do método setRetainInstance() em Fragments foi suspenso. Com a introdução de ViewModels, os desenvolvedores têm uma API específica para manter o estado que pode ser associado a gráficos de Activities, Fragments e Navigation. Isso permite que os desenvolvedores usem um Fragment normal não retido e mantenham o estado específico que querem reter separado, evitando uma fonte comum de vazamentos e mantendo as propriedades úteis de uma única criação e destruição do estado retido, ou seja, o construtor do ViewModel e o callback onCleared() recebido.

  • Suspensão do uso do adaptador ViewPager 1: com o lançamento do ViewPager2 1.0.0, o uso das classes FragmentPagerAdapter e FragmentStatePagerAdapter para interagir com ViewPager foi suspenso. Consulte Migrar do ViewPager para o ViewPager2.

Versão 1.3.0-rc02

27 de janeiro de 2021

Lançamento de androidx.fragment:fragment:1.3.0-rc02, androidx.fragment:fragment-ktx:1.3.0-rc02 e androidx.fragment:fragment-testing:1.3.0-rc02. A versão 1.3.0-rc02 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que um DialogFragment pai aparecia acima de um DialogFragment filho após uma mudança de configuração. Agora, os fragmentos da caixa de diálogo filha sempre são exibidos acima de um fragmento da caixa de diálogo pai (I30806, b/177439520).
  • Correção do problema em que uma operação hide com um Animation fazia com que o fragmento de ocultação fosse atualizado no fim da animação (I57e22, b/175417675).
  • Os fragmentos com transições adicionados antes de a hierarquia de visualização ser anexada agora alcançam RESUMED corretamente (I1fc1d, b/177154873).

Novas correções de bugs do gerenciador de estado

  • A visualização Lifecycle do Fragment agora gerencia corretamente os casos em que a visualização do Fragment é destruída antes que a Lifecycle alcance CREATED, evitando exceções que indiquem "nenhum evento abaixo de INITIALIZED" (eda2bd, b/176138645).
  • Os fragmentos que usam um Animator agora aparecem na ordem correta ao usar FragmentContainerView (Id9aa3, b/176089197).

Versão 1.3.0-rc01

16 de dezembro de 2020

Lançamento de androidx.fragment:fragment:1.3.0-rc01, androidx.fragment:fragment-ktx:1.3.0-rc01 e androidx.fragment:fragment-testing:1.3.0-rc01. A versão 1.3.0-rc01 contém estas confirmações.

Correções de bugs

  • onPrepareOptionsMenu() agora segue a mesma lógica de onCreateOptionsMenu() e não é mais chamado quando um fragmento pai chama setMenuVisibility(false) (Id7de8, b/173203654).

Novas correções de bugs do gerenciador de estado

  • Correção do artefato de vazamento e visual ao adicionar um fragmento com uma Animation a uma FragmentContainerView e, em seguida, interromper essa adição com uma operação de destaque (I952d8).
  • Correção de um problema em que a visualização do fragmento ficava na hierarquia de visualizações se fosse substituída durante os métodos onCreate() ou onViewCreated() (I8a7d5).
  • Agora, o foco é restaurado corretamente para as visualizações raiz do fragmento quando elas são retomadas (Ifc84b).
  • A combinação de operações de destaque e de substituição na mesma transação de fragmento agora exibirá as animações adequadas (Ifd4e4, b/170328691).

Versão 1.3.0-beta02

2 de dezembro de 2020

Lançamento de androidx.fragment:fragment:1.3.0-beta02, androidx.fragment:fragment-ktx:1.3.0-beta02 e androidx.fragment:fragment-testing:1.3.0-beta02. A versão 1.3.0-beta02 contém estas confirmações.

Novos recursos

  • O FragmentScenario foi totalmente convertido para Kotlin, mantendo a compatibilidade binária de origem pelo uso das interfaces funcionais do Kotlin 1.4 para FragmentAction (I19d31).

Mudanças de comportamento

  • FragmentContainerViews que não inflarem um fragmento usando o atributo class ou android:name agora podem ser usadas fora de uma FragmentActivity (Id4397, b/172266337).
  • A tentativa de definir o ciclo de vida máximo de um fragmento como DESTROYED agora gerará uma IllegalArgumentException (Ie7651, b/170765622).
  • A inicialização de um FragmentScenario com um estado DESTROYED agora gerará uma IllegalArgumentException (I73590, b/170765622).

Novas correções de bugs do gerenciador de estado

  • Correção de um problema em que a visualização não chegava ao estado final caso você interrompesse uma transição de fragmento que usava um Animator ou uma das opções TRANSIT_FRAGMENT_ (I92426, b/169874632).
  • Foi corrigido um problema que impedia que fragmentos com uma saída Animation fossem devidamente destruídos (I83d65).
  • Os fragmentos de saída que tiveram seus efeitos revertidos agora são cancelados corretamente e reiniciados com o efeito de inserção adequado (I62226, b/167092035).
  • Correção de um problema em que a saída Animator de um hide() não era executada (Id7ffe).
  • Agora, os fragmentos aparecem corretamente quando são adiados e iniciados imediatamente (Ie713b, b/170022857).
  • Fragmentos que removem a visualização focada durante uma animação não tentarão mais restaurar o foco na visualização separada ao chegar a RESUMED (I38c65, b/172925703).

Contribuição externa

  • FragmentFactory agora armazena em cache classes de fragmento separadamente para diferentes instâncias de ClassLoader. Agradecemos a Simon Schiller (#87, link em inglês; b/113886460).

Versão 1.3.0-beta01

1º de outubro de 2020

Lançamento de androidx.fragment:fragment:1.3.0-beta01, androidx.fragment:fragment-ktx:1.3.0-beta01 e androidx.fragment:fragment-testing:1.3.0-beta01. A versão 1.3.0-beta01 contém estas confirmações.

Novos recursos

  • setMaxLifecycle() agora é compatível com a configuração do estado Lifecycle para INITIALIZING, desde que o fragmento não tenha sido movido para CREATED (b/159662173).

Mudanças na API

Mudanças de comportamento

  • Os arquivos de recursos de fragmentos foram definidos corretamente como privados (aosp/1425237).

Correções de bugs

  • Agora, os fragmentos inflados que usam a tag <fragment> aguardarão da forma correta até que as visualizações sejam adicionadas a um contêiner antes de serem movidos para STARTED (I02f4c).
  • Os fragmentos que estão visíveis e depois setMaxLifecycle() para CREATED agora executam adequadamente os efeitos de saída (b/165822335).
  • A remoção de um fragmento desanexado que não é adicionado à pilha de retorno não causa mais vazamentos de memória. Cortesia de Nicklas Ansman Giertz (b/166489383).
  • Os fragmentos ativos sempre terão um FragmentManager não nulo, e fragmentos com um FragmentManager não nulo sempre serão considerados ativos (aosp/1422346).
  • Os efeitos padrão de fragmento, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE, agora usam Animator em vez de Animation (b/166155034).

Novas correções de bugs do gerenciador de estado

  • Agora, os fragmentos restauram corretamente o estado de foco de visualização da direita antes de iniciar a animação (Icc256).
  • Fragmentos com apenas uma transição de elemento compartilhado agora completam corretamente os efeitos especiais, o que significa que eles se movem para o estado final (Iaebc7, b/166658128).
  • As visualizações de fragmentos agora são sempre removidas do contêiner antes de serem destruídas (Id5876).
  • O novo gerenciador de estado agora remove de maneira consistente a visualização de fragmento existente antes de adicionar a nova (I41a6e).
  • As mudanças explícitas na visibilidade de uma visualização de fragmento agora são respeitadas pelo novo gerenciador de estado. Isso significa que se você definir a visualização de um fragmento de entrada como INVISIBLE antes da animação começar, ela permanecerá invisível (b/164481490).
  • Agora, os fragmentos priorizam Animators em vez de Animations, o que significa que um fragmento com ambos executará apenas o Animator e ignorará a Animation (b/167579557).
  • O novo gerenciador de estado não faz mais com que os fragmentos sejam atualizados ao usar animações de entrada (b/163084315).

Problema conhecido

Ao usar o novo gerenciador de estado, se você pressionar "Voltar" durante um efeito especial de entrada em vez de retornar ao fragmento anterior, o fragmento antigo nunca será adicionado novamente, resultando em uma tela em branco (b/167259187, b/167092035, b/168442830).

Versão 1.3.0-alpha08

19 de agosto de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha08, androidx.fragment:fragment-ktx:1.3.0-alpha08 e androidx.fragment:fragment-testing:1.3.0-alpha08. A versão 1.3.0-alpha08 contém estas confirmações.

Novo gerenciador de estado

Esta versão inclui uma grande refatoração do gerenciamento interno de estado do FragmentManager, que afeta o envio de animações, transições e métodos do ciclo de vida e como as transações adiadas são processadas. Essa opção fica ativada por padrão. Para saber mais detalhes, consulte a postagem do blog Fragments: Rebuilding the Internals (link em inglês). (b/139536619, b/147749580).

  • Uma API experimental no FragmentManager.enableNewStateManager(boolean) pode ser usada para controlar se FragmentManager usa o novo gerenciador de estado (I7b6ee)

Os problemas a seguir são corrigidos somente quando se usa o novo gerenciador de estado:

  • O fragmento anterior de uma operação replace agora é interrompido corretamente antes de o novo fragmento ser iniciado (b/161654580).
  • Agora, os fragmentos impedem várias animações concorrentes nos mesmos fragmentos, evitando casos em que uma Animation modificaria todos os efeitos de Transition, ou um Animator e uma Transition em um fragmento individual seriam executados (b/149569323).
  • A enterTransition e a exitTranstion de todos os fragmentos que entram e saem agora são executadas, em vez de apenas o último fragmento de entrada e o primeiro fragmento de saída (b/149344150).
  • Os fragmentos adiados não ficam mais presos no estado CREATED. Agora, eles são movidos para STARTED com outros fragmentos (b/129035555).
  • Correção de um problema em que o FragmentManager executaria operações fora de ordem ao misturar uma transação reordenada adiada e uma transação não reordenada (b/147297731).
  • Abrir vários fragmentos simultaneamente não fará mais com que os fragmentos intermediários fiquem temporariamente visíveis ao adiá-los (b/37140383).
  • FragmentManager agora retorna os fragmentos corretos ao chamar findFragmentById() ou findFragmentByTag() do callback onAttachFragment() (b/153082833).
  • Os fragmentos não chamam mais onCreateView() em fragmentos que são destruídos quando o fragmento que os substitui é adiado (b/143915710).
  • A mensagem de erro ao tentar combinar instâncias de Transition do framework e Transition do AndroidX agora menciona o fragmento com a transição inválida (b/155574969).

Mudanças de comportamento

  • Agora você pode chamar launch() em um ActivityResultLauncher no método de ciclo de vida onCreate() de um fragmento (b/161464278).
  • Chamar registerForActivityResult() depois de onCreate() agora gera uma exceção indicando que isso não é permitido, em vez de falhar silenciosamente em fornecer resultados após uma mudança na configuração (b/162255449).
  • FragmentActivity agora usa a API OnContextAvailableListener introduzida na atividade 1.2.0-alpha08 para restaurar o estado do FragmentManager. Todos os listeners adicionados às subclasses da FragmentActivity serão executados depois desse listener. (I513da)

Correções de bugs

  • ActivityOptions aprovadas ao usar startIntentSenderForResult() agora são respeitadas (b/162247961).

Problema conhecido

  • Ao usar o novo gerenciador de estado, definir diretamente a visibilidade da visualização raiz do fragmento depois de onViewCreated() e antes de onResume() faz com que a visibilidade definida seja modificada pelo FragmentManager, que controla a visibilidade da visualização raiz. Como alternativa, use sempre as operações hide() e show() para mudar a visibilidade do fragmento (b/164481490).

Versão 1.3.0-alpha07

22 de julho de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha07, androidx.fragment:fragment-ktx:1.3.0-alpha07 e androidx.fragment:fragment-testing:1.3.0-alpha07. A versão 1.3.0-alpha07 contém estas confirmações.

Novos recursos

  • FragmentScenario agora é compatível com a configuração de um estado inicial do Lifecycle de CREATED, STARTED ou RESUMED, em vez de sempre mover o fragmento para o estado RESUMED (b/159662750).
  • Adição de uma alternativa à API FragmentScenario de onFragment na forma do método de extensão withFragment reificado de Kotlin, que permite retornar um valor. Em especial, ele repete as exceções geradas no bloco especificado. (b/158697631).

Mudanças de comportamento

  • FragmentScenario agora usa setMaxLifecycle() para implementar moveToState(), garantindo um comportamento consistente em todos os níveis da API e desacoplando o estado do fragmento da atividade implícita (b/156527405).
  • O SavedStateRegistryOwner retornado por ViewTreeSavedStateRegistryOwner agora está vinculado ao Lifecycle da visualização de fragmento. Isso garante que o estado seja salvo e restaurado de forma simultânea à visualização do fragmento (b/158503763).

Correções de bugs

  • Os fragmentos agora aguardam a anexação da visualização do fragmento antes de chamar ViewCompat.requestApplyInsets(), evitando casos em que a solicitação inserida era descartada (b/158095749).
  • Chamar clearFragmentResultListener agora libera corretamente o observador de Lifecycle (b/159274993).

Versão 1.3.0-alpha06

10 de junho de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha06, androidx.fragment:fragment-ktx:1.3.0-alpha06 e androidx.fragment:fragment-testing:1.3.0-alpha06. A versão 1.3.0-alpha06 contém estas confirmações.

Novos recursos

  • O callback onAttachFragment() em FragmentActivity e Fragment foi suspenso. Um novo FragmentOnAttachListener foi adicionado para oferecer uma alternativa mais flexível, permitindo a delegação de onAttachFragment() para listeners testáveis separados e compatibilidade com o acréscimo de um listener a FragmentManagers que não sejam o FragmentManager do filho direto (I06d3d).

Correções de bugs

  • Os fragmentos pai agora têm o estado de visualização restaurado antes dos fragmentos filhos, corrigindo um problema de ordem visual após uma mudança de configuração quando um DialogFragment mostrava outro DialogFragment como fragmento filho (b/157195715).
  • Correção de um problema em que a verificação de lint UseRequireInsteadOfGet não processava corretamente os usos encadeados dos operadores ?. e !! (b/157677616).

Versão 1.3.0-alpha05

20 de maio de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha05, androidx.fragment:fragment-ktx:1.3.0-alpha05 e androidx.fragment:fragment-testing:1.3.0-alpha05. A versão 1.3.0-alpha05 contém estas confirmações.

Novos recursos

Mudanças na API

  • As APIs setFragmentResult() e setFragmentResultListener() agora usam Bundle e FragmentResultListener não nulos, respectivamente. Para limpar explicitamente um resultado ou listener definido anteriormente, use os novos métodos clearFragmentResult() e clearFragmentResultListener() (b/155416778).
  • As extensões setFragmentResultListener() do Kotlin que usam um lambda agora estão marcadas como inline (b/155323404).

Mudanças de comportamento

  • O startActivityForResult(), startIntentSenderForResult() e requestPermissions em Fragment, anteriormente obsoletos, agora usam ActivityResultRegistry internamente, removendo assim a restrição de uso apenas dos bits inferiores (abaixo de 0xFFFF) para seus códigos de solicitação ao usar essas APIs (b/155518741).

Atualizações da documentação

  • A documentação sobre os construtores Fragment(@LayoutRes int) e DialogFragment(@LayoutRes int) foi expandida para esclarecer que eles devem ser chamados no construtor sem argumentos das subclasses ao usar o FragmentFactory padrão (b/153042497).

Versão 1.3.0-alpha04

29 de abril de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha04, androidx.fragment:fragment-ktx:1.3.0-alpha04 e androidx.fragment:fragment-testing:1.3.0-alpha04. A versão 1.3.0-alpha04 contém estas confirmações.

Novos recursos

  • Inclusão de compatibilidade para transmitir resultados entre dois Fragments usando novas APIs em FragmentManager. Isso funciona para fragmentos de hierarquia (pai/filho), DialogFragments e fragmentos no Navigation e garante que os resultados sejam enviados para seu Fragment apenas enquanto ele for pelo menos STARTED (b/149787344).

Mudanças na API

  • O uso das APIs de fragmento de destino foi suspenso. Para transmitir dados entre fragmentos, as novas APIs de resultado do Fragment precisam ser usadas (b/149787344).
  • O uso das APIs startActivityForResult()/onActivityResult() e requestPermissions()/onRequestPermissionsResult() no Fragment foi suspenso. Use as APIs Activity Result (aosp/1290887).
  • Alteração interruptiva de Activity 1.2.0-alpha04: o método prepareCall() foi renomeado como registerForActivityResult() (aosp/1278717).

Correções de bugs

  • O getViewLifecycleOwner() do fragmento agora é interrompido antes de onSaveInstanceState() ser chamado, espelhando o comportamento do ciclo de vida do fragmento (b/154645875).
  • Chamar setMenuVisibility(false) em um fragmento agora modifica corretamente a visibilidade dos menus fornecidos pelos fragmentos filhos (b/153593580).
  • Correção de um illegalStateException ao adicionar um fragmento à hierarquia de visualização de DialogFragment com FragmentContainerView (b/154366601).
  • O método getDefaultViewModelProviderFactory() em fragmentos não falha mais ao hospedar seus fragmentos fora de uma atividade (b/153762914).

Versão 1.3.0-alpha03

1º de abril de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha03, androidx.fragment:fragment-ktx:1.3.0-alpha03 e androidx.fragment:fragment-testing:1.3.0-alpha03. A versão 1.3.0-alpha03 contém estas confirmações.

Mudanças na API

  • Os métodos prepareCall em Fragment agora são final (b/152439361).

Correções de bugs

  • Correção de uma regressão introduzida no Fragment 1.3.0-alpha02 ao usar BottomSheetDialogFragment (b/151652127, aosp/1263328, aosp/1265163).
  • Correção de uma falha ao usar prepareCall de um fragmento após uma mudança de configuração (b/152137004).
  • Correção de um problema em que elementos compartilhados e transições de saída são ignorados ao usar setTargetFragment() (b/152023196).
  • Do Fragment 1.2.4: as regras do Fragment ProGuard foram atualizadas para permitir a ofuscação de fragmentos mantidos (b/151605338).
  • Do Fragment 1.2.4: a regra de lint FragmentLiveDataObserve foi desativada em classes DialogFragment porque o ciclo de vida e o ciclo de visualização delas sempre estão em sincronia, o que torna seguro usar this ou viewLifecycleOwner ao chamar observe (b/151765086).

Mudanças na dependência

  • Os fragmentos dependem da Activity 1.2.0-alpha03, que teve melhorias significativas na API Activity Result introduzida na Activity 1.2.0-alpha02.

Versão 1.3.0-alpha02

18 de março de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha02, androidx.fragment:fragment-ktx:1.3.0-alpha02 e androidx.fragment:fragment-testing:1.3.0-alpha02. A versão 1.3.0-alpha02 contém estas confirmações.

Novos recursos

  • Inclusão de compatibilidade com a API ActivityResultRegistry introduzida na Activity 1.2.0-alpha02 para gerenciar os fluxos startActivityForResult()+onActivityResult() e requestPermissions()+onRequestPermissionsResult() sem modificar métodos no seu Fragment, além de fornecer hooks para testar esses fluxos. Veja a atualização de Como gerar resultados com uma Activity (b/125158199).

Mudanças na API

  • Agora, DialogFragment fornece um construtor que usa um @LayoutRes para indicar o layout que onCreateView() precisa inflar por padrão (b/150327080).
  • O uso do método onActivityCreated() está suspenso. O código relativo à visualização do fragmento precisa ser feito em onViewCreated(), que é chamado imediatamente antes de onActivityCreated(), e outros códigos de inicialização precisam estar em onCreate(). Para receber um callback especificamente quando o onCreate() da atividade for concluído, é necessário registrar um LifeCycleObserver no Lifecycle da atividade em onAttach() e removê-lo assim que o callback onCreate() for recebido (b/144309266).

Correções de bugs

  • Do Fragment 1.2.3: correção de um bug no DialogFragment que causava um StackOverflowError ao chamar getLayoutInflater() de dentro do onCreateDialog() (b/117894767, aosp/1258664).
  • Do Fragment 1.2.3: redução do escopo das regras do ProGuard incluídas no Fragment para garantir que as classes de Fragment não usadas possam ser removidas (b/149665169).
  • Do Fragment 1.2.3: correção de falsos positivos na verificação de lint UseRequireInsteadOfGet ao usar um nome de variável local que sombreava o nome da propriedade Kotlin (b/149891163).
  • Do Fragment 1.2.3: FragmentContainerView não gera mais uma UnsupportedOperationException para usar o construtor incorreto na visualização do layout (b/149707833).

Problemas conhecidos

  • O BottomSheetDialogFragment deixou de posicionar corretamente a própria caixa de diálogo na tela (b/151652127).

Versão 1.3.0-alpha01

4 de março de 2020

Lançamento de androidx.fragment:fragment:1.3.0-alpha01, androidx.fragment:fragment-ktx:1.3.0-alpha01 e androidx.fragment:fragment-testing:1.3.0-alpha01. A versão 1.3.0-alpha01 contém estas confirmações.

Novos recursos

Mudanças na API

  • O uso do método setRetainInstance() em fragmentos está suspenso. Com a introdução de ViewModels, os desenvolvedores têm uma API específica para manter o estado que pode ser associado a gráficos de Activities, Fragments e Navigation . Isso permite que os desenvolvedores usem um Fragment normal não retido e mantenham o estado específico que querem reter separado, evitando uma fonte comum de vazamentos e mantendo as propriedades úteis de uma única criação e destruição do estado retido, ou seja, o construtor do ViewModel e o callback onCleared() recebido (b/143911815).
  • Com o lançamento de ViewPager2 1.0.0, as classes FragmentPagerAdapter e FragmentStatePagerAdapter para interação com ViewPager ficaram obsoletas. Consulte Migrar do ViewPager para o ViewPager2. (b/145132715).

Correções de bugs

  • As regras do Fragment ProGuard agora mantêm corretamente apenas as classes Fragment de construtores padrão que são usadas para todas as instâncias Fragment, corrigindo uma regressão introduzida no Fragment 1.2.1 (b/149665169).
  • As regras de lint require___() adicionadas no Fragment 1.2.2 não são mais falsos positivos em variáveis locais que compartilham o mesmo nome que os nomes das propriedades Kotlin sombreadas, ou seja, view (b/149891163).
  • FragmentContainerView não gera mais um UnsupportedOperationException ao usar a visualização de layout no Android Studio (b/149707833).
  • Correção de um problema em que fragmentos retidos adicionados após o estado ser salvo não eram recriados continuamente e depois destruídos após cada mudança de configuração (b/145832397).

Versão 1.2.5

Versão 1.2.5

10 de junho de 2020

Lançamento de androidx.fragment:fragment:1.2.5, androidx.fragment:fragment-ktx:1.2.5 e androidx.fragment:fragment-testing:1.2.5. A versão 1.2.5 contém estas confirmações.

Correções de bugs

  • O getViewLifecycleOwner() do fragmento agora é interrompido antes de onSaveInstanceState() ser chamado, espelhando o comportamento do ciclo de vida do fragmento. Isso foi lançado anteriormente em Fragment 1.3.0-alpha04 (b/154645875).
  • Chamar setMenuVisibility(false) em um fragmento agora modifica corretamente a visibilidade dos menus fornecidos pelos fragmentos filhos. Isso foi lançado anteriormente em Fragment 1.3.0-alpha04 (b/153593580).

Versão 1.2.4

Versão 1.2.4

1º de abril de 2020

Lançamento de androidx.fragment:fragment:1.2.4, androidx.fragment:fragment-ktx:1.2.4 e androidx.fragment:fragment-testing:1.2.4. A versão 1.2.4 contém estas confirmações.

Correções de bugs

  • Atualização das regras do Fragment ProGuard para permitir a ofuscação de fragmentos mantidos (b/151605338).
  • A regra de lint FragmentLiveDataObserve foi desativada em classes DialogFragment porque o ciclo de vida e o ciclo de visualização estão sempre em sincronia, o que torna seguro usar this ou viewLifecycleOwner ao chamar observe (b/151765086).

Versão 1.2.3

Versão 1.2.3

18 de março de 2020

Lançamento de androidx.fragment:fragment:1.2.3, androidx.fragment:fragment-ktx:1.2.3 e androidx.fragment:fragment-testing:1.2.3. A versão 1.2.3 contém estas confirmações.

Correções de bugs

  • Correção de um bug em DialogFragment que causava um StackOverflowError ao chamar getLayoutInflater() de onCreateDialog() (b/117894767, aosp/1258665).
  • Redução do escopo das regras do ProGuard incluídas no Fragment para garantir que as classes de Fragment não usadas possam ser removidas. (b/149665169).
  • Correção de falsos positivos na verificação de lint UseRequireInsteadOfGet ao usar um nome de variável local que sombreava o nome da propriedade Kotlin (b/149891163).
  • FragmentContainerView não gera mais um UnsupportedOperationException para usar o construtor incorreto na visualização do layout (b/149707833).

Versão 1.2.2

Versão 1.2.2

19 de fevereiro de 2020

Lançamento de androidx.fragment:fragment:1.2.2, androidx.fragment:fragment-ktx:1.2.2 e androidx.fragment:fragment-testing:1.2.2. A versão 1.2.2 contém estas confirmações.

Novas verificações de lint

  • O lint sugere o uso do viewLifecycleOwner como LifecycleOwner para chamadas para OnBackPressedDispatcher em onCreateView(), onViewCreated() e onActivityCreated() (b/142117657).
  • Inclusão de uma nova verificação de lint que confirma que você está usando a debugImplementation correta ao usar o artefato fragment-testing (b/141500106).
  • Os fragmentos agora sugerem o uso dos métodos require___() associados para mensagens de erro mais descritivas em vez de checkNotNull(get___()), requireNonNull(get___()) ou get___()!! para todas as APIs Fragment que incluem um get e require equivalente (aosp/1202883).

Correções de bugs

  • Correção dos arquivos do Fragment ProGuard para evitar avisos de R8 (b/148963981).
  • Melhoria na verificação de lint existente sugerindo o uso de viewLifecycleOwner ao usar observe para gerenciar também a versão do método de extensão livedata-ktx de observe (b/148996309).
  • Correção da formatação de muitas verificações de lint (aosp/1157012).

Contribuições externas

  • Em nome do Slack, agradecemos a Zac Sweers por contribuir com as verificações de lint require___() (aosp/1202883).

Versão 1.2.1

Versão 1.2.1

5 de fevereiro de 2020

Lançamento de androidx.fragment:fragment:1.2.1, androidx.fragment:fragment-ktx:1.2.1 e androidx.fragment:fragment-testing:1.2.1. A versão 1.2.1 contém estas confirmações.

Correções de bugs

  • Fragmentos adicionados via métodos add e replace que tomam uma instância Class (ou as versões reificadas de Kotlin) agora têm o construtor padrão mantido pelo ProGuard (b/148181315).
  • FragmentStatePagerAdapter e FragmentPagerAdapter não detectam mais exceções geradas por FragmentManager durante a execução de finishUpdate() (aosp/1208711).
  • Correção de um problema em que FragmentManager.findFragment() não funcionava com fragmentos adicionados usando a tag <fragment> (b/147784323).
  • Os fragmentos inflados usando a tag <fragment> sempre recebem uma chamada para onInflate() antes de onCreate() no layout (aosp/1215856).
  • Chamar toString() em uma instância FragmentManager não gera mais uma NullPointerException quando a Activity já está destruída (b/148189412).

Mudanças na dependência

Versão 1.2.0

Versão 1.2.0

22 de janeiro de 2020

Lançamento de androidx.fragment:fragment:1.2.0, androidx.fragment:fragment-ktx:1.2.0 e androidx.fragment:fragment-testing:1.2.0. A versão 1.2.0 contém essas confirmações (link em inglês).

Mudanças importantes desde a versão 1.1.0

  • FragmentContainerView: o FragmentContainerView é o contêiner recomendado para fragmentos adicionados dinamicamente, substituindo o uso de FrameLayout ou outros layouts. Ele também é compatível com os mesmos class, android:name e android:tag opcional que a tag <fragment>, mas usa um FragmentTransaction normal para adicionar esse fragmento inicial, em vez do caminho de código personalizado usado por <fragment>.
  • Timing de onDestroyView(): agora os fragmentos aguardam as animações de saída, transições de framework de saída e transições do AndroidX de saída (ao usar Transition 1.3.0) serem concluídas antes de chamar onDestroyView().
  • add() e replace() baseado em classe: adição de novas sobrecargas de add() e replace() em FragmentTransaction que levam Class<? extends Fragment> e Bundle opcional de argumentos. Esses métodos usam sua FragmentFactory para construir uma instância do Fragment a ser adicionada. As extensões Kotlin que usam tipos materializados (ou seja, fragmentTransaction.replace<YourFragment>(R.id.container)) também foram adicionadas ao fragment-ktx.
  • Integração do ViewModel SavedState de Lifecycle: SavedStateViewModelFactory agora é a fábrica padrão aplicada ao usar by viewModels(), by activityViewModels(), o construtor ViewModelProvider ou ViewModelProviders.of() com um Fragment.
  • Novas verificações de lint: nova verificação de lint que garante o uso de getViewLifecycleOwner() ao observar LiveData de onCreateView(), onViewCreated() ou onActivityCreated().
  • Suspensão do uso de getFragmentManager(): o uso dos métodos getFragmentManager() e requireFragmentManager() no Fragment está suspenso e foi substituído por um único método getParentFragmentManager(), que retorna o valor não nulo FragmentManager ao qual o Fragment é adicionado. Você pode usar isAdded() para determinar se é seguro fazer a chamada.
  • Suspensão do uso de FragmentManager.enableDebugLogging(): o uso do método estático FragmentManager.enableDebugLogging está suspenso. O FragmentManager agora respeita Log.isLoggable() para a tag FragmentManager, permitindo que você ative o registro DEBUG ou VERBOSE sem recompilar seu app.

Problemas conhecidos

  • Fragments referenciados somente pelo atributo class ou android:name em uma FragmentContainerView não são mantidos pelo ProGuard automaticamente, exigindo que você adicione manualmente uma regra de manutenção a cada classe de fragmento (b/142601969).
  • Ao adicionar um NavHostFragment usando class ou android:name em XML com FragmentContainerView, não use findNavController() no onCreate() da sua atividade (b/142847973).

Versão 1.2.0-rc05

8 de janeiro de 2020

Lançamento de androidx.fragment:fragment:1.2.0-rc05, androidx.fragment:fragment-ktx:1.2.0-rc05 e androidx.fragment:fragment-testing:1.2.0-rc05. A versão 1.2.0-rc05 contém estas confirmações.

Correções de bugs

  • Correção de uma regressão no Fragment 1.2.0-rc04 ao usar a tag <fragment> que fazia com que onViewCreated() fosse chamado incorretamente durante a destruição da atividade (b/146290333).
  • Os Fragments adicionados com a tag <fragment> agora têm as próprias não configurações apagadas, mesmo quando estão apenas no layout, ou seja, apenas no layout de paisagem. Como consequência, esses Fragments agora são movidos corretamente para CREATED mesmo quando não estiverem no seu layout, em vez de serem instanciados, mas nunca passando por qualquer método de ciclo de vida (b/145769287).

Versão 1.2.0-rc04

18 de dezembro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-rc04, androidx.fragment:fragment-ktx:1.2.0-rc04 e androidx.fragment:fragment-testing:1.2.0-rc04. A versão 1.2.0-rc04 contém estas confirmações.

Correções de bugs

  • As animações foram ajustadas para TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE e TRANSIT_FRAGMENT_FADE para evitar problemas visuais (b/145468417).

Versão 1.2.0-rc03

4 de dezembro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-rc03, androidx.fragment:fragment-ktx:1.2.0-rc03 e androidx.fragment:fragment-testing:1.2.0-rc03. A versão 1.2.0-rc03 contém estas confirmações.

Correções de bugs

  • Corrigida uma mudança de comportamento não intencional em que Fragments que foram removidos ainda são retornados por findFragmentById() / findFragmentByTag() enquanto as animações/transições de saída deles são executadas (b/143982969, aosp/1167585).
  • Os fragmentos filhos agora são interrompidos corretamente antes dos pais, quando a atividade que os contém chama onSaveInstanceState() (b/144380645).
  • Correção de um problema em que as Views eram incorretamente marcadas como INVISIBLE depois de exibirem um Fragment oculto (b/70793925).
  • Agora as transições compartilhadas de elementos de Fragment processam as Views que foram rotacionadas, dimensionadas etc. (b/142835261).

Atualizações da documentação

  • Esclarecimento da documentação sobre suspensão de uso relacionada a setUserVisibleHint() (b/143897055).
  • Documentação aprimorada sobre setFragmentFactory() e getFragmentFactory() para indicar melhor que a configuração de FragmentFactory também afetará os FragmentManagers filhos (aosp/1170095).

Mudanças na dependência

  • Os fragmentos agora dependem do Lifecycle 2.2.0-rc03, Lifecycle ViewModel SavedState 1.0.0-rc03 e da Activity 1.1.0-rc03.

Versão 1.2.0-rc02

7 de novembro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-rc02, androidx.fragment:fragment-ktx:1.2.0-rc02 e androidx.fragment:fragment-testing:1.2.0-rc02. A versão 1.2.0-rc02 contém estas confirmações.

Correções de bugs

  • No Kotlin, o LintFix para uso de getViewLifecycleOwner() ao observar LiveData de onCreateView(), onViewCreated() ou onActivityCreated() (introduzido em Fragment1.2.0-rc01) agora usa a sintaxe de acesso à propriedade Kotlin viewLifecycleOwner em vez de getViewLifecycleOwner() (aosp/1143821).

Versão 1.2.0-rc01

23 de outubro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-rc01, androidx.fragment:fragment-ktx:1.2.0-rc01 e androidx.fragment:fragment-testing:1.2.0-rc01. A versão 1.2.0-rc01 contém estas confirmações.

Novos recursos

  • FragmentContainerView agora é compatível com o atributo class, além de android:name, espelhando a funcionalidade da tag <fragment> (b/142722242).
  • Adicionada uma nova verificação do Lint que garante que você está usando getViewLifecycleOwner() ao observar LiveData de onCreateView(), onViewCreated() ou onActivityCreated() (b/137122478).

Correções de bugs

  • Os callbacks onDismiss e onCancel em DialogFragment agora garantem que a DialogInterface transmitida a eles seja de valor não nulo e que getDialog() retorne valores não nulos quando executado (b/141974033).
  • FragmentContainerView agora adiciona o Fragment definido por class ou android:name como parte da inflação, garantindo que findFragmentById() e findFragmentByTag() funcionem imediatamente depois (b/142520327).
  • Corrigida uma IllegalStateException em FragmentContainerView devido ao estado sendo salvo (b/142580713).
  • Corrigida uma UnsupportedOperationException em FragmentContainerView quando a classe FragmentContainerView é ofuscada (b/142657034).

Problemas conhecidos

  • Fragments referenciados somente pelo atributo class ou android:name em uma FragmentContainerView não são mantidos pelo ProGuard automaticamente, exigindo que você adicione manualmente uma regra de manutenção a cada classe de fragmento. Desativamos a regra de Lint que sugere a mudança para FragmentContainerView até que isso seja corrigido por aapt2 (b/142601969).

Versão 1.2.0-beta02

11 de outubro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-beta02, androidx.fragment:fragment-ktx:1.2.0-beta02 e androidx.fragment:fragment-testing:1.2.0-beta02. A versão 1.2.0-beta02 contém estas confirmações.

Correções de bugs

  • Corrigido um problema em que o onInflate() do Fragment não recebia os atributos adequados de FragmentContainerView, casos importantes como NavHostFragment (b/142421837).

Versão 1.2.0-beta01

9 de outubro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-beta01, androidx.fragment:fragment-ktx:1.2.0-beta01 e androidx.fragment:fragment-testing:1.2.0-beta01. A versão 1.2.0-beta01 contém estas confirmações.

Novos recursos

  • FragmentContainerView inclui compatibilidade com adição de um fragmento inicial com compatibilidade com os atributos XML android:name e, opcionalmente, android:tag. Ao contrário da tag <fragment>, a FragmentContainerView usa uma FragmentTransaction normal internamente para adicionar o fragmento inicial, permitindo mais operações de FragmentTransaction em FragmentContainerView, e possibilita o uso da vinculação de visualizações para o layout (b/139830628, b/141177981).
  • Fragments agora contém um aviso Lint que oferece uma correção rápida para substituir <fragment> por FragmentContainerView (b/139830056).

Correções de bugs

  • Corrigida uma ClassCastException ao usar androidx.transition (b/140680619).
  • Agora, ao usar Transition 1.3.0-beta01, os Fragments aguardam as transições de androidx.transition, além das animações e transições de framework, que foram corrigidas em Fragment 1.2.0-alpha03 e Fragment 1.2.0-alpha02, respectivamente, para concluir antes de enviar onDestroyView() (aosp/1119841).
  • Ao usar Transition 1.3.0-beta01, os Fragments agora cancelam as transições androidx.transition corretamente antes de iniciar novas transições/animações no mesmo contêiner (aosp/1119841).
  • Corrigido um problema na API 17 e versões anteriores ao usar transições androidx.transition na visualização raiz do seu Fragment ao usar FragmentContainerView (b/140361893).
  • O artefato fragment-testing agora depende do AndroidX Test 1.2.0 para corrigir uma incompatibilidade com o Espresso 3.2.0 mais recente (b/139100149).
  • Remoção do uso de Log.w no FragmentManager (aosp/1126468).

Problemas conhecidos

  • onInflate() do Fragment não recebe atributos adequados de FragmentContainerView, casos importantes como NavHostFragment (b/142421837).

Versão 1.2.0-alpha04

18 de setembro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-alpha04, androidx.fragment-ktx:example:1.2.0-alpha04 e androidx.fragment:fragment-testing:1.2.0-alpha04. A versão 1.2.0-alpha04 contém estas confirmações.

Mudanças na API

  • O uso dos métodos getFragmentManager() e requireFragmentManager() em Fragment foi suspenso e substituído por um único getParentFragmentManager(), que retorna o valor não nulo FragmentManager a que o Fragment é adicionado. Você pode usar isAdded() para determinar se é a chamada é segura (b/140574496).
  • O uso do método FragmentManager.enableDebugLogging estático foi suspenso. FragmentManager agora respeita Log.isLoggable() para a tag FragmentManager, permitindo que você ative o registro DEBUG ou VERBOSE sem recompilar seu app. (aosp/1116591).

Correções de bugs

  • Agora, os Fragments são destruídos corretamente enquanto as animações de saída em outros fragmentos estão em execução (b/140574199).
  • Corrigido um problema em que Fragments chamava Activity.findViewById() em locais que antes não chamava (aosp/1116431).

Versão 1.2.0-alpha03

5 de setembro de 2019

Lançamento de androidx.fragment:fragment:1.2.0-alpha03, androidx.fragment:fragment-ktx:1.2.0-alpha03 e androidx.fragment:fragment-testing:1.2.0-alpha03. As confirmações incluídas nessa versão podem ser encontradas aqui.

Mudanças na API

Correções de bugs

  • FragmentContainerView agora inverte a ordem do desenho corretamente ao destacar fragmentos da pilha de retorno (b/139104187).
  • Corrigido um problema em que a animação errada era executada ao destacar um fragmento e ao adicionar ao fragmento ao mesmo tempo (b/111659726).
  • Agora, os Fragments aguardam o término das transições (além das animações, que eram fixas no Fragment 1.2.0-alpha02) antes de encerrar e enviar onDestroyView() (b/138741697).

Versão 1.2.0-alpha02

7 de agosto de 2019

Lançamento de androidx.fragment:fragment:1.2.0-alpha02, androidx.fragment:fragment-ktx:1.2.0-alpha02 e androidx.fragment:fragment-testing:11.2.0-alpha02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • SavedStateViewModelFactory agora é a fábrica padrão empregada ao usar by viewModels(), by activityViewModels(), o construtor ViewModelProvider ou ViewModelProviders.of() com um Fragment (b/135716331).
  • As animações padrão ao usar TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE, TRANSIT_FRAGMENT_FADE com setTransition em uma FragmentTransaction foram atualizadas para corresponder às animações usadas pelas atividades nos dispositivos Android 10 (aosp/1012812, aosp/1014730).

Mudanças na API

  • Introdução de FragmentContainerView como o contêiner altamente recomendado para Fragments adicionados dinamicamente, substituindo o uso de FrameLayout etc. Essa ação corrige problemas relacionados à ordem z de animações e inserções de janelas enviadas para Fragments (b/37036000, aosp/985243, b/136494650).
  • Adicionado um novo método FragmentManager.findFragment(View) estático para recuperar o Fragment de uma visualização inflada por um fragment. Uma extensão Kotlin também está disponível em fragment-ktx. (aosp/1090757).
  • Adicionadas novas sobrecargas de add() e replace() em FragmentTransaction, que usa Class<? extends Fragment> e Bundle argumentos opcionais. Esses métodos usam sua FragmentFactory para construir uma instância do Fragment a ser adicionada. A extensão Kotlin que usa tipos materializados (ou seja, fragmentTransaction.replace<YourFragment>(R.id.container)) também foi adicionada ao fragment-ktx (b/126124987).
  • Adicionadas anotações @MainThread aos callbacks de ciclo de vida de Fragment (b/127272564).
  • Suspensão do uso das APIs relacionadas ao título da localização atual em FragmentTransaction e FragmentManager.BackStackEntry (b/138252944).
  • O uso do método setTransitionStyle em FragmentTransaction foi suspenso (aosp/1011537).
  • Muitos dos métodos em FragmentManager não são mais abstract. O próprio FragmentManager permanece abstract e não pode ser diretamente instanciado ou estendido. Você continuará a receber apenas uma instância existente de getSupportFragmentManager(), getChildFragmentManager() etc.

Correções de bugs

  • Do Fragment 1.1.0-rc04: agora, as transições adiadas nos Fragments exibidos são corretamente canceladas (b/138251858).
  • Do Fragment 1.1.0-rc03: corrigido um problema em que chamar postponeEnterTransition() com um tempo limite mais de uma vez não cancelava os tempos limites anteriores (b/137797118).
  • Do Fragment 1.1.0-rc02: corrigida uma falha em FragmentPagerAdapter e FragmentStatePagerAdapter ao remover o item atual (b/137209870).
  • Agora, os Fragments aguardam o término das animações antes de enviar onDestroyView()(b/136110528).
  • Agora, as animações de Fragment de fragmentos filhos e descendentes são tratadas corretamente ao animar o Fragment pai (b/116675313).
  • Corrigida uma NullPointerException ao usar transições de elementos compartilhados e combinar operações de exibição e de adição (b/120507394).
  • Adicionada uma solução alternativa a IllegalStateExceptions ao usar FragmentPagerAdapter e FragmentStatePagerAdapter em testes Robolectric (b/137201343).

Versão 1.2.0-alpha01

2 de julho de 2019

Lançamento de androidx.fragment:fragment:1.2.0-alpha01, androidx.fragment:fragment-ktx:1.2.0-alpha01 e androidx.fragment:fragment-testing:1.2.0-alpha01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Agora, FragmentManager chama requestApplyInsets() depois de anexar a visualização do Fragment e logo antes de chamar onViewCreated(), garantindo que sua visualização tenha sempre as inserções corretas (b/135945162).

Correções de bugs

  • Corrigida uma NullPointerException ao exibir uma FragmentTransaction que usava setPrimaryNavigationFragment() antes de replace() (b/134673465).

Versão 1.1.0

Versão 1.1.0

5 de setembro de 2019

Lançamento de androidx.fragment:fragment:1.1.0, androidx.fragment:fragment-ktx:1.1.0 e androidx.fragment:fragment-testing:1.1.0. As confirmações incluídas nessa versão podem ser encontradas neste link.

Mudanças importantes desde a versão 1.0.0

  • fragment-testing: o artefato fragment-testing fornece uma classe FragmentScenario para testar um fragmento isoladamente. Consulte Testar a documentação dos fragmentos do seu app para saber mais detalhes.
  • FragmentFactory: agora, é possível definir uma FragmentFactory em um FragmentManager para gerenciar a criação de instâncias de fragmentos, removendo a exigência rigorosa de ter um construtor sem argumento.
  • Delegações de propriedade Kotlin para ViewModels: o artefato fragment-ktx agora contém dois representantes de propriedade Kotlin, by viewModels(), para acessar ViewModels associados ao fragmento individual, e by activityViewModels(), para acessar ViewModels com escopo para a atividade.
  • Máximo de Lifecycle: agora, é possível definir um estado máximo de Lifecycle para um fragmento chamando setMaxLifecycle() em uma FragmentTransaction. Isso substitui a setUserVisibleHint() obsoleta. FragmentPagerAdapter e FragmentStatePagerAdapter têm um novo construtor que permite alternar para o novo comportamento.
  • Construtor AppCompatActivity LayoutId: subclasses de FragmentActivity agora podem optar por chamar um construtor em FragmentActivity que leva um ID R.layout, indicando o layout que será definido como a visualização de conteúdo, em vez de chamar setContentView() em onCreate(). Isso não altera a exigência de que sua subclasse tenha um construtor sem argumento.
  • Construtor Fragment LayoutId: subclasses de Fragment agora podem optar por chamar um construtor em Fragment que leva um ID R.layout, indicando o layout que será usado para esse fragmento, em vez de substituir onCreateView(). O layout inflado pode ser configurado em onViewCreated().
  • Adiar com tempo limite: foi adicionada uma nova sobrecarga de postponeEnterTransition() que tem um tempo limite.

Versão 1.1.0-rc04

7 de agosto de 2019

Lançamento de androidx.fragment:fragment:1.1.0-rc04, androidx.fragment:fragment-ktx:1.1.0-rc04 e androidx.fragment:fragment-testing:1.1.0-rc04. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Agora, as transições adiadas nos Fragments exibidos são corretamente canceladas. (b/138251858)

Versão 1.1.0-rc03

19 de julho de 2019

Lançamento de androidx.fragment:fragment:1.1.0-rc03, androidx.fragment:fragment-ktx:1.1.0-rc03 e androidx.fragment:fragment-testing:1.1.0-rc03. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Corrigido um problema em que chamar postponeEnterTransition() com um tempo limite mais de uma vez não cancelava os tempos limite anteriores (b/137797118).

Versão 1.1.0-rc02

17 de julho de 2019

Lançamento de androidx.fragment:fragment:1.1.0-rc02, androidx.fragment:fragment-ktx:1.1.0-rc02 e androidx.fragment-testing:fragment:1.1.0-rc02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Corrigida uma falha em FragmentPagerAdapter e FragmentStatePagerAdapter ao remover o item atual (b/137209870).

Versão 1.1.0-rc01

2 de julho de 2019

Lançamento de androidx.fragment:fragment:1.1.0-rc01, androidx.fragment:fragment-ktx:1.1.0-rc01 e androidx.fragment:fragment-testing:1.1.0-rc01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Agora, os Fragments atualizam corretamente a própria visibilidade ao usar as operações show() ou hide() enquanto a transição é executada (b/133385058).
  • Corrigida uma NullPointerException ao exibir uma FragmentTransaction que usava setPrimaryNavigationFragment() antes de replace() (b/134673465).

Versão 1.1.0-beta01

5 de junho de 2019

Lançamento de androidx.fragment:fragment:1.1.0-beta01, androidx.fragment:fragment-ktx:1.1.0-beta01 e androidx.fragment:fragment-testing:1.1.0-beta01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Agora, os callbacks de androidx.lifecycle.Lifecycle (relacionados especificamente com STARTED, RESUMED, PAUSED, STOPPED e DESTROYED) para Fragments aninhados são aninhados corretamente (b/133497591).
  • As instâncias de OnBackPressedCallback registradas no onCreate() de um Fragment agora têm precedência sobre o FragmentManager filho (b/133175997).
  • Os fragmentos filhos não são mais animados quando o fragmento pai está sendo substituído (b/121017790).
  • Agora, as animações e transições de Fragments são ignoradas ao usar animateLayoutChanges="true", corrigindo um problema em que os Fragments não eram destruídos corretamente (b/116257087).

Versão 1.1.0-alpha09

16 de maio de 2019

Lançamento de androidx.fragment:fragment:1.1.0-alpha09, androidx.fragment:fragment-ktx:1.1.0-alpha09 e androidx.fragment:fragment-testing:1.1.0-alpha09. As confirmações incluídas nessa versão podem ser encontradas aqui.

Mudanças na API

  • Agora, os fragmentos recebem um callback para um novo método onPrimaryNavigationFragmentChanged(boolean) quando o fragmento de navegação principal muda (aosp/960857).

Correções de bugs

  • Os itens de menu inflados por um Fragment filho agora são removidos corretamente quando o Fragment pai é removido. b/131581013

Versão 1.1.0-alpha08

7 de maio de 2019

Lançamento de androidx.fragment:fragment:1.1.0-alpha08, androidx.fragment:fragment-ktx:1.1.0-alpha08 e androidx.fragment:fragment-testing:1.1.0-alpha08. As confirmações incluídas nessa versão podem ser encontradas neste link.

Essa versão é incompatível com Preferences 1.1.0-alpha01 a 1.1.0-alpha04. Atualize para Preferences 1.1.0-alpha05 ao usar essa versão de Fragments.

Novos recursos

  • Adicionada uma nova sobrecarga de postponeEnterTransition() que usa um tempo limite, depois do qual o Fragment chama automaticamente startPostponedEnterTransition() (b/120803208).

Mudanças na API

  • Alteração interruptiva: o método FragmentFactory instantiate, anteriormente obsoleto, que utilizava um Bundle, foi removido (aosp/953856).
  • Alteração interruptiva: as constantes RESUME_ONLY_CURRENT_FRAGMENT e USE_SET_USER_VISIBLE_HINT em FragmentPagerAdapter e FragmentStatePagerAdapter foram renomeadas para BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT e BEHAVIOR_SET_USER_VISIBLE_HINT, respectivamente (aosp/954782).

Correções de bugs

  • Fragments que tiveram o ciclo de vida limitado por setMaxLifecycle() não são mais retomados antes de atingirem o estado final (b/131557151).
  • Ao usar setMaxLifecycle(Lifecycle.State.CREATED), a visualização de Fragments será devidamente destruída (aosp/954180).

Versão 1.1.0-alpha07

25 de abril de 2019

Lançamento de androidx.fragment:fragment:1.1.0-alpha07, androidx.fragment:fragment-ktx:1.1.0-alpha07 e androidx.fragment:fragment-testing:1.1.0-alpha07. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Agora você pode definir um estado máximo de Lifecycle para um Fragment chamando setMaxLifecycle() em uma FragmentTransaction. Isso substitui a setUserVisibleHint() obsoleta. FragmentPagerAdapter e FragmentStatePagerAdapter têm um novo construtor que permite alternar para o novo comportamento. (b/129780800).

Mudanças na API

  • moveToState(STARTED) em FragmentScenario agora só pode ser chamado em dispositivos com API de nível 24 ou mais recente (b/129880016).

Mudanças de comportamento

  • Como consequência de (b/129907905), os fragmentos na pilha de retorno não receberão um callback para onCreateView() quando a atividade de hospedagem for recriada. Agora, onCreateView() só será chamado quando o fragmento se tornar visível (ou seja, quando a pilha de retorno for exibida).

Correções de bugs

  • Corrigido um problema ao usar uma tag <fragment> em XML e o construtor contentLayoutId de FragmentActivity ou AppCompatActivity (b/129907905).
  • Corrigido um problema em que os fragmentos na pilha de retorno não eram movidos para pelo menos CREATED depois de uma mudança na configuração, fazendo com que os ViewModels e os fragmentos filhos retidos não fossem descartados corretamente (b/129593351).
  • Corrigida uma falha em restoreSaveState causada por uma dessincronização dos fragmentos retidos depois de o estado da instância ser salvo (b/130433793, aosp/947824).
  • Corrigidos problemas em que um OnBackPressedCallback adicionado com um ciclo de vida do fragmento não era chamado se o FragmentManager tivesse uma pilha de retorno. Consulte androidx.activity 1.0.0-alpha07 para ver mais detalhes. (aosp/948209).
  • Fragments não aplicam mais LAYER_TYPE_HARDWARE para animações. Se você precisar especificamente de uma animação da camada de hardware, defina-a como parte da sua animação. (b/129486478).

Versão 1.1.0-alpha06

3 de abril de 2019

Lançamento de androidx.fragment:fragment:1.1.0-alpha06, androidx.fragment:fragment-ktx:1.1.0-alpha06 e androidx.fragment:fragment-testing:1.1.0-alpha06. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • As exceções geradas pelo FragmentManager agora incluem o nome do Fragment na mensagem. (b/67759402)

Mudanças na API

  • Fragment e FragmentActivity agora contêm um segundo construtor que usa um @LayoutRes int, que substitui o comportamento anterior de anotar sua classe com @ContentView. Essa abordagem funciona nos módulos do app e da biblioteca. (b/128352521).
  • Agora o onActivityResult() de FragmentActivity está marcado corretamente como @CallSuper (b/127971684).
  • O método instantiate de FragmentFactory que usa um argumento Bundle se tornou obsoleto, e os apps precisam usar a nova sobrecarga instantiate que não usa um Bundle (b/128836103).
  • Os métodos FragmentScenario agora estão devidamente anotados com @StyleRes (aosp/924193).
  • O uso de FragmentTabHost está suspenso (b/127971835).
  • getThemedContext() do FragmentActivity foi removido (aosp/934078).

Correções de bugs

  • Corrigida uma regressão em 1.1.0-alpha05 que fazia com que o Fragment recebido piscasse na tela (b/129405432).
  • Corrigido um problema em que o fragmento de navegação principal era perdido depois de uma série de operações popBackStack+replace+popBackStack (b/124332597).
  • Corrigido um problema ao usar construtores @ContentView na sua Activity ao restaurar o estado do Fragment (b/127313094).
  • Corrigida a lógica de setTargetFragment() ao substituir um Fragment de destino existente por um Fragment ainda não anexado ao FragmentManager (aosp/932156).

Versão 1.1.0-alpha05

13 de março de 2019

Lançamento de androidx.fragment:fragment:1.1.0-alpha05, androidx.fragment:fragment-ktx:1.1.0-alpha05 e androidx.fragment:fragment-testing:1.1.0-alpha05. A lista completa de confirmações incluídas nessa versão pode ser encontrada neste link.

Novos recursos

  • Pesquisas da anotação @ContentView agora estão em cache (b/123709449).

Mudanças de comportamento

  • A ação de chamar remove(), hide(), show(), detach() e setPrimaryNavigationFragment() com um Fragment anexado a um FragmentManager diferente agora gera uma IllegalStateException, em vez de causar uma falha silenciosa (aosp/904301).

Correções de bugs

  • onNewIntent para FragmentActivity agora é corretamente marcado com @CallSuper (b/124120586).
  • Corrigido um problema em que o onDismiss() do DialogFragment podia ser chamado duas vezes ao usar getDialog().dismiss() ou getDialog().cancel() (b/126563750).

Versão 1.1.0-alpha04

7 de fevereiro de 2019

Lançamento de androidx.fragment:fragment 1.1.0-alpha04, androidx.fragment:fragment-ktx 1.1.0-alpha04 e androidx.fragment:fragment-testing 1.1.0-alpha04.

Novos recursos

  • Adicionada compatibilidade com a anotação de classe @ContentView, que permite indicar qual arquivo XML de layout precisa ser inflado como uma alternativa para a modificação de onCreateView(). É recomendado fazer um trabalho relacionado à visualização em onViewCreated(). (aosp/837619).
  • Agora, fragment-testing depende do androidx.test:core-ktx 1.1.0 estável (b/121209673).
  • Agora, você pode usar openActionBarOverflowOrOptionsMenu com FragmentScenario para testar os menus de opções hospedados do Fragment (b/121126668).

Mudanças na API

  • Adicionado um método requireArguments() que retorna um @NonNull Bundle ou gera uma IllegalStateException (b/121196360).
  • Adicionada uma observação de que getLifecycle(), getViewLifecycleOwner() e getViewLifecycleOwnerLiveData() não podem ser modificados e que será considerado final em uma versão futura. Registre uma solicitação de recurso se você estiver modificando esse método atualmente. (aosp/880714).
  • Incluída uma observação de que getViewModelStore() não precisa ser modificado e que será considerado final em uma versão futura. Registre uma solicitação de recurso se você estiver modificando esse método atualmente. (aosp/880713).
  • Corrigido um problema de compatibilidade com o binário em versões anteriores de Fragments (aosp/887877) (aosp/889834).

Correções de bugs

  • Os fragmentos de destino são limpos corretamente quando você transmite nullpara setTargetFragment() (aosp/849969).
  • Corrigido um problema em que os Fragments de destino às vezes ficavam indisponíveis em onDestroy() ou depois dele (b/122312935).
  • O onDismiss() do DialogFragment agora é chamado antes de onDestroy() (aosp/874133) (aosp/890734).

Versão 1.1.0-alpha03

17 de dezembro de 2018

Novos recursos

  • Fragment agora implementa BundleSavedStateRegistryOwner e depende da biblioteca SavedState recém-lançada (aosp/824380).
  • Um delegado da propriedade by activityViewModels Kotlin foi adicionado para recuperar os ViewModels associados à Activity contida (b/119050253).
  • O delegado da propriedade by viewModels Kotlin foi expandido para usar um método lambda opcional para conseguir o ViewModelStoreOwner, permitindo transmitir o Fragment pai ou outro ViewModelStoreOwner personalizado com um código como val viewModel: MyViewModel by viewModels(::requireParentFragment) (b/119050253).

Mudanças na API

  • FragmentScenario agora permite especificar um tema, como Theme.AppCompat (b/119054431). Essa é uma alteração interruptiva.
  • Adicionado um método requireView() que retorna uma @NonNull View ou gera uma IllegalStateException (b/120241368).
  • Adicionado um método requireParentFragment() que retorna uma @NonNull Fragment ou gera uma IllegalStateException (b/112103783).

Correções de bugs

  • Corrigida IllegalStateException: falha ao salvar o estado (b/120814739).
  • Agora, os fragmentos restaurados do estado da instância salva sempre recebem um Bundle não nulo (b/119794496).
  • Os Fragments removidos não reutilizam mais o objeto Lifecycle se forem adicionados novamente (b/118880674).

Versão 1.1.0-alpha02

3 de dezembro de 2018

Novos recursos

  • Agora, as extensões Kotlin do FragmentScenario permitem usar um lambda para a construção do Fragment como uma alternativa à transmissão em uma instância FragmentFactory (aosp/812913).

Correções de bugs

  • Corrigida uma IllegalStateException ao usar Fragments aninhados na pilha de retorno (b/119256498).
  • Corrigida uma falha ao usar FragmentScenario.recreate() com FragmentFactory (aosp/820540).
  • Corrigido um problema em que os Fragments de destino não podiam ser acessados depois que o Fragment era removido (aosp/807634).

Versão 1.1.0-alpha01

5 de novembro de 2018

Essa é a primeira versão do artefato fragment-testing e FragmentScenario, criada com base nas APIs androidx.test:core. Consulte a documentação de testes do Fragment para saber mais detalhes.

Novos recursos

  • Nova classe FragmentScenario para testar Fragments isoladamente.
  • Agora você pode definir uma FragmentFactory em qualquer FragmentManager para controlar como novas instâncias de Fragment são instanciadas.
  • Inclusão de um novo delegado da propriedade by viewModels() Kotlin para recuperar ViewModels de um Fragment.
  • Eventos de entrada pendentes, como cliques, agora são cancelados no onStop() de um Fragment.

Mudanças na API

  • As anotações de nulidade foram significativamente expandidas na superfície da API do Fragment.

Correções de bugs

  • Correção de um problema que causava falhas nas operações do Fragment no LiveData (b/77944637)).

Problemas conhecidos

  • Fragments de destino não podem ser acessados depois que um Fragment é removido do FragmentManager.
  • fragment-testing depende de androidx.test:core:1.0.0-beta01, em vez do androidx.test:core:1.0.0 correto.