Fragmento

Segmente seu app em várias telas independentes hospedadas em uma atividade.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
30 de outubro de 2024 1.8,5 - - -

Como 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 ao arquivo build.gradle do seu app ou módulo:

Groovy

dependencies {
    def fragment_version = "1.8.5"

    // 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.5"

    // 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 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 conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

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

Versão 1.8

Versão 1.8.5

30 de outubro de 2024

Lançamento de androidx.fragment:fragment-*:1.8.5. A versão 1.8.5 contém estas confirmações.

Correções de bugs

  • Correção de um IllegalStateException acionado por saveBackStack somente após um gesto de volta preditivo ser cancelado ou interrompido (I3387d, b/342419080).

Versão 1.8.4

2 de outubro de 2024

Lançamento de androidx.fragment:fragment-*:1.8.4. A versão 1.8.4 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que pressionar rapidamente o botão "Voltar" do sistema ou fazer um gesto de volta rapidamente causava falhas nos fragmentos ao usar o AndroidX Transitions. (Ibc038, b/364804225).
  • Correção de um problema em fragmentos em que interromper um gesto de volta preditiva enviava o gerenciador de fragmentos para um estado indefinido e até mostrava o fragmento errado. (If82e2, b/338624457).
  • Uma UninitializedPropertyAccessException em AndroidFragment foi corrigida ao trocar dinamicamente a classe que a instância AndroidFragment está usando. (I12dea).

Versão 1.8.3

4 de setembro de 2024

Lançamento de androidx.fragment:fragment-*:1.8.3. A versão 1.8.3 contém estas confirmações.

Correções de bugs

  • Agora, o FragmentManager leva em conta corretamente as operações pendentes ao processar o gesto de volta preditiva. Isso garante que a restauração do sistema não cause mais uma IndexOutOfBoundsException. (I9ba32, b/342316801).
  • O AndroidFragment não falha mais se for adicionado à composição enquanto o estado da atividade/fragmento que o contém já estiver salvo. (I985e9, b/356643968).

Versão 1.8.2

24 de julho de 2024

Lançamento de androidx.fragment:fragment-*:1.8.2. A versão 1.8.2 contém estas confirmações.

Correções de bugs

  • AndroidFragment agora gerencia corretamente os casos em que o fragmento pai é colocado na backstack do fragmento, evitando problemas de "Nenhuma visualização encontrada para o ID" ao retornar para esse fragmento (I94608).
  • Os fragmentos adicionados pelo método FragmentTransaction.add que usa um ViewGroup agora aguardam onContainerAvailable antes de avançar para onStart() Isso afeta os usuários dessa API, como AndroidFragment, que agora espera que a AndroidFragment entre novamente na composição antes de passar por onStart(). (I94608).

Versão 1.8.1

26 de junho de 2024

Lançamento de androidx.fragment:fragment-*:1.8.1. A versão 1.8.1 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que fragmentos sem um contêiner eram imediatamente DESTROYED ao iniciar um gesto de volta preditivo Agora, eles são mantidos no estado CREATED até que o gesto seja concluído. (If6b83, b/345244539).

Versão 1.8.0

12 de junho de 2024

Lançamento de androidx.fragment:fragment-*:1.8.0. A versão 1.8.0 contém estas confirmações.

Mudanças importantes desde a versão 1.7.0

  • O artefato fragment-compose agora contém um Composable AndroidFragment que permite adicionar fragmentos à hierarquia do Compose pelo nome da classe do fragmento. Ele processa automaticamente o salvamento e a restauração do estado do fragmento. Isso deve ser usado como uma substituição direta para a abordagem anteriormente recomendada de usar AndroidViewBinding para inflar um fragmento.
  • O callback onBackStackChangeCancelled na interface OnBackStackChangedListener do FragmentManager agora é acionado como parte da execução de operações no FragmentManager, alinhando-o ao tempo do callback onBackStackChangeCommitted.

Versão 1.8.0-rc01

29 de maio de 2024

Lançamento de androidx.fragment:fragment-*:1.8.0-rc01. A versão 1.8.0-rc01 contém estas confirmações.

Correções de bugs

  • O callback onBackStackChangeCancelled na interface FragmentManagers OnBackStackChangedListener agora é acionado como parte da execução de operações em FragmentManager, aproximando-o do tempo do callback onBackStackChangeCommitted. (I5ebfb, b/332916112).

Versão 1.8.0-beta01

14 de maio de 2024

Lançamento de androidx.fragment:fragment-*:1.8.0-beta01. A versão 1.8.0-beta01 contém estas confirmações.

Correções de bugs

  • Do Fragment 1.7.1: a volta preditiva agora só é executada para transações em que todos os fragmentos têm um Animator ou uma transição do AndroidX que pode ser buscada. Isso corrige um problema em que o cancelamento de uma transação parcialmente pesquisável causava uma tela preta. (I43037, b/339169168).

Versão 1.8.0-alpha02

17 de abril de 2024

Lançamento de androidx.fragment:fragment-*:1.8.0-alpha02. A versão 1.8.0-alpha02 contém estas confirmações.

Correções de bugs

  • Do Fragment 1.7.0-rc02: foram adicionados registros para indicar por que a configuração de um sharedElement sem outras transições não será executada. (Iec48e).
  • Do Fragment 1.7.0-rc02: foi corrigido um bug em que, se um elemento compartilhado não pesquisável fosse adicionado a uma transação em que todas as outras transições fossem pesquisáveis, haveria uma falha Agora, a transação será considerada corretamente como não pesquisável. (I18ccd).

Versão 1.8.0-alpha01

3 de abril de 2024

Lançamento de androidx.fragment:fragment-*:1.8.0-alpha01. A versão 1.8.0-alpha01 contém estas confirmações.

Novos recursos

  • O novo AndroidFragment Composable permite adicionar fragmentos à hierarquia do Compose usando o nome da classe do fragmento. Ele processa automaticamente o salvamento e a restauração do estado do fragmento. Isso pode ser usado como uma substituição direta para o Composable do AndroidViewBinding.(b/312895363, Icf841).

Mudanças na documentação

  • Atualizamos a documentação das APIs OnBackStackChangedListener para indicar quando elas são chamadas e como devem ser usadas. (I0bfd9).

Atualização de dependências

Versão 1.7

Versão 1.7.1

14 de maio de 2024

Lançamento de androidx.fragment:fragment-*:1.7.1. A versão 1.7.1 contém estas confirmações.

Correções de bugs

  • A volta preditiva agora só será executada para transações em que todos os fragmentos têm um animador ou uma transição do AndroidX que pode ser buscada. Isso corrige um problema em que o cancelamento de uma transação parcialmente pesquisável causava uma tela em branco. (I43037, b/339169168).

Versão 1.7.0

1º de maio de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0. A versão 1.7.0 contém estas confirmações.

Suporte para o gesto de volta preditivo

  • Os fragmentos agora oferecem suporte à volta preditiva no app ao usar Animator ou a AndroidX Transition 1.5.0. Isso permite que os usuários usem o gesto "Voltar" para conferir o fragmento anterior procurando o animador/transição antes de decidir se vai confirmar a transação concluindo o gesto ou cancelando.
Sistema de transição Recurso XML Suporte à volta preditiva
Animation R.anim Não
Animator R.animator Sim
Framework Transition R.transition Não
AndroidX Transition com Transition 1.4.1 ou uma versão anterior R.transition Não
AndroidX Transition com Transition 1.5.0 R.transition Sim

Se você encontrar problemas no suporte à volta preditiva em fragmentos depois de ativar o gesto de volta preditivo, registre um problema no Fragment com um exemplo de projeto que reproduza seu problema. É possível desativar a volta preditiva usando FragmentManager.enabledPredictiveBack(false) na onCreate() da sua atividade.

FragmentManager.OnBackStackChangedListener() agora fornece onBackStackChangeProgressed() e onBackStackChangeCancelled() para receber o progresso de volta preditivo e eventos cancelados, respectivamente.

Fragment Compose Artifact

Um novo artefato fragment-compose foi criado com foco no suporte a apps que estão no processo de migração de uma arquitetura baseada em fragmentos para uma arquitetura totalmente baseada no Compose.

O primeiro recurso disponível neste novo artefato é um método de extensão content em Fragment que busca facilitar o uso do Compose para a interface de um fragmento individual, criando um ComposeView para você e definindo o ViewCompositionStrategy correto.

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

Versão 1.7.0-rc02

17 de abril de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-rc02. A versão 1.7.0-rc02 contém estas confirmações.

Correções de bugs

  • Foram adicionados registros para indicar por que a configuração de um sharedElement sem nenhuma outra transição não será executada. (Iec48e).
  • Correção de um bug em que, se um elemento compartilhado não pesquisável era adicionado a uma transação em que todas as outras transições eram buscáveis, havia uma falha. Agora, a transação será considerada corretamente não pesquisável. (I18ccd).

Versão 1.7.0-rc01

3 de abril de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-rc01. A versão 1.7.0-rc01 contém estas confirmações.

Atualização de dependências

Versão 1.7.0-beta01

20 de março de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-beta01. A versão 1.7.0-beta01 contém estas confirmações.

Mudanças na API

  • O FragmentHostCallback agora é escrito em Kotlin para que a nulidade do tipo genérico do Host corresponda à nulidade do tipo de retorno de onGetHost(). (I40af5).

Correções de bugs

  • Correção de um problema em que, ao confirmar um gesto de volta preditiva em um fragmento que não está em um contêiner, esse fragmento nunca era destruído. O fragmento será movido imediatamente para o estado final. (Ida0d9).
  • Correção de um problema em fragmentos em que interromper transições de entrada com um gesto de volta preditiva destruía a visualização de entrada e deixava uma tela em branco (Id3f22, b/319531491).

Versão 1.7.0-alpha10

7 de fevereiro de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha10. A versão 1.7.0-alpha10 contém estas confirmações.

Correções de bugs

  • Foi corrigido o problema conhecido na versão anterior do Fragment em que, ao usar o suporte de volta preditiva do Fragment para Animator ou a transição do AndroidX, os fragmentos lançavam um NullPointerException de handleOnBackProgressed se nenhum FragmentManager.OnBackStackChangedListener fosse adicionado por addOnBackStackChangedListener. (I7c835).

Versão 1.7.0-alpha09

24 de janeiro de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha09. A versão 1.7.0-alpha09 contém estas confirmações.

Artefato do fragmento do Compose

Um novo artefato fragment-compose foi criado com foco no suporte a apps que estão no processo de migração de uma arquitetura baseada em fragmentos para uma arquitetura totalmente baseada no Compose.

O primeiro recurso disponível neste novo artefato é um método de extensão content em Fragment que facilita o uso do Compose para a interface de um fragmento individual, criando um ComposeView para você e definindo o ViewCompositionStrategy correto. (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)
    }
}

Novos recursos

  • FragmentManager.OnBackStackChangedListener() agora fornece onBackStackChangeProgressed() e onBackStackChangeCancelled() para receber o progresso de volta preditiva e eventos cancelados, respectivamente. (214b87).

Problema conhecido

  • Ao usar o suporte de volta preditiva do Fragment para Animator ou para a transição do AndroidX, os fragmentos vão gerar uma NullPointerException de handleOnBackProgressed se nenhuma FragmentManager.OnBackStackChangedListener tiver sido adicionada por addOnBackStackChangedListener. Adicionar um listener manualmente vai resolver o problema. Uma correção vai estar disponível para isso na próxima versão do Fragments.

Versão 1.7.0-alpha08

10 de janeiro de 2024

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha08. A versão 1.7.0-alpha08 contém estas confirmações.

Limpeza

Versão 1.7.0-alpha07

29 de novembro de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha07. A versão 1.7.0-alpha07 contém estas confirmações.

Correções de bugs

  • Correção de uma NullPointerException causada pela configuração de uma transição de elemento compartilhado e também pela falha na definição de uma entrada/exitTransition. (I8472b).
  • Do Fragment 1.6.2: quando o fragmento de um FragmentContainerView é inflado, os estados dele, como FragmentManager, host e ID, agora são acessíveis no callback onInflate. (I1e44c, b/307427423).
  • Do Fragment 1.6.2: ao usar clearBackStack para remover um conjunto de fragmentos, qualquer ViewModel de fragmento aninhado será limpo quando o ViewModels do fragmento pai for limpo. (I6d83c, b/296173018).

Versão 1.7.0-alpha06

4 de outubro de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha06. A versão 1.7.0-alpha06 contém estas confirmações.

Atualização de dependências

Versão 1.7.0-alpha05

20 de setembro de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha05. A versão 1.7.0-alpha05 contém estas confirmações.

Novos recursos

  • Os fragmentos agora oferecem suporte à volta preditiva ao usar transições do AndroidX. Isso permite que você use o gesto de voltar para procurar o fragmento anterior com sua transição personalizada do AndroidX antes de decidir se vai confirmar ou cancelar a transação com o gesto concluído. É necessário depender da versão Transição 1.5.0-alpha03 para ativar esse recurso. (Ib49b4, b/285175724).

Problemas conhecidos

  • Atualmente, há um problema em que, depois de cancelar um gesto de volta com uma transição, a próxima vez que você iniciar o gesto de volta, ele não vai executar a transição, causando uma tela em branco. Isso pode ser causado por um problema na biblioteca Transition. (b/300157785). Se você encontrar esse problema, envie um problema para o Fragment com um projeto de exemplo que reproduza o problema. Você pode desativar a volta preditiva usando FragmentManager.enabledPredictiveBack(false) no onCreate() da sua atividade.

Versão 1.7.0-alpha04

6 de setembro de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha04. A versão 1.7.0-alpha04 contém estas confirmações.

Correções de bugs

  • Correção de um problema ao cancelar um gesto de volta preditiva em que os fragmentos não conseguiam chegar ao estado correto do ciclo de vida (I7cffe, b/297379023).
  • Correção de uma regressão em que as animações podiam ser executadas com transições (I59f36).
  • Correção de um problema ao usar a volta preditiva com fragmentos em que a tentativa de voltar duas vezes em sucessão rápida no penúltimo fragmento na backstack causava uma falha (Ifa1a4).

Versão 1.7.0-alpha03

23 de agosto de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha03. A versão 1.7.0-alpha03 contém estas confirmações.

Correções de bugs

  • Foi corrigido um problema com fragmentos ao usar a volta preditiva que fazia com que o primeiro fragmento na backstack do gerenciador de fragmentos fosse ignorado e a atividade fosse encerrada ao usar a volta do sistema pela navegação de três botões ou o gesto de volta preditiva. (I0664b, b/295231788).

Versão 1.7.0-alpha02

9 de agosto de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha02. A versão 1.7.0-alpha02 contém estas confirmações.

Correções de bugs

  • Ao usar fragmentos com gestos de volta preditivos da API 34, se você estiver usando um sistema de transição que não oferece suporte à busca (Animations, Transitions) ou nenhuma transição, os fragmentos agora vão aguardar até que o gesto seja concluído antes de executar a ação de volta. (I8100c).

Versão 1.7.0-alpha01

7 de junho de 2023

Lançamento de androidx.fragment:fragment-*:1.7.0-alpha01. Esta versão foi desenvolvida em uma ramificação interna.

Novos recursos

  • Os fragmentos agora oferecem suporte à volta preditiva no app ao usar Animator. Isso permite que você use o gesto "Voltar" para conferir o fragmento anterior com seu animador personalizado antes de decidir se vai confirmar a transação com o gesto concluído ou cancelá-la. Também é possível desativar esse novo comportamento usando o enablePredictiveBack() experimental e transmitindo false.

Versão 1.6

Versão 1.6.2

1º de novembro de 2023

Lançamento de androidx.fragment:fragment-*:1.6.2. A versão 1.6.2 contém estas confirmações.

Correções de bugs

  • Quando o fragmento de um FragmentContainerView é inflado, os estados dele, como FragmentManager, host e ID, agora são acessíveis no callback onInflate. (I1e44c, b/307427423).
  • Ao usar clearBackStack para remover um conjunto de fragmentos, o ViewModel de qualquer fragmento aninhado será apagado quando os ViewModels do fragmento pai forem apagados (I6d83c, b/296173018).

Versão 1.6.1

26 de julho de 2023

Lançamento de androidx.fragment:fragment-*:1.6.1. A versão 1.6.1 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que o estado salvo armazenado quando a atividade era interrompida, mas não destruída, era armazenado em cache incorretamente mesmo depois que a instância de fragmento fosse movida de volta para o estado RESUMED Isso faria com que o estado armazenado em cache fosse reutilizado se essa instância de fragmento estivesse na backstack durante o uso da API de várias backstacks para salvar e restaurar esse fragmento. (I71288, b/246289075).

Atualização de dependências

  • O Fragment agora depende da Activity 1.7.2. Isso corrige um problema em que os usuários do Kotlin não podiam estender ComponentDialog sem uma dependência explícita da atividade (b/287509323).

Versão 1.6.0

7 de junho de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0. A versão 1.6.0 contém estas confirmações.

Mudanças importantes desde a versão 1.5.0

  • O estado salvo dos Fragments foi totalmente dividido entre o estado da biblioteca particular (classes Parcelable personalizadas) e o estado fornecido pelo desenvolvedor, que agora é sempre armazenado em um Bundle que permite determinar exatamente a origem do estado de um fragmento
  • A interface FragmentManager.OnBackStackChangedListener foi expandida com dois callbacks adicionais de onBackStackChangeStarted e onBackStackChangeCommitted que são chamados com cada Fragment logo antes de serem adicionados/removidos da backstack de fragmentos e logo após a transação ser confirmada, respectivamente.
  • FragmentStrictMode adicionou uma nova WrongNestedHierarchyViolation que detecta quando um fragmento filho está aninhado dentro da hierarquia de visualização do elemento pai, mas não foi adicionado ao childFragmentManager do pai
  • As APIs Fragment e FragmentManager que usam uma Intent ou uma IntentSender agora recebem a anotação @NonNull corretamente para evitar a transmissão de um valor nulo, já que ele sempre causa uma falha nas respectivas APIs do framework do Android que esses métodos chamam.
  • O DialogFragment agora oferece acesso ao ComponentDialog subjacente pela API requireComponentDialog().
  • O fragmento agora depende do Lifecycle 2.6.1.
  • O fragmento agora depende de SavedState 1.2.1.
  • O fragmento agora depende do ProfileInstaller 1.3.0.
  • O artefato fragment-testing-manifest separa as entradas do manifesto dos outros componentes do teste de fragmentos. Isso significa que é possível usar:

    debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
    androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")
    

    Isso evita conflitos devido a um desvio da versão entre fragment-testing e androidx.test.

Versão 1.6.0-rc01

10 de maio de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-rc01. A versão 1.6.0-rc01 contém estas confirmações.

Correções de bugs

  • Foi corrigido um problema que fazia com que ActivityResults fossem enviados com o código de solicitação incorreto quando várias solicitações startActivityForResult eram feitas consecutivamente (If0b9d, b/249519359).
  • Foi corrigido um problema em que os callbacks onBackStackChangeListener eram enviados para transações que não alteravam a backstack se fossem misturados com transações que fazem isso (I0eb5c, b/279306628).

Versão 1.6.0-beta01

19 de abril de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-beta01. A versão 1.6.0-beta01 contém estas confirmações.

Correções de bugs

  • Usar postponeEnterTransition com um tempo limite e substituir o fragmento adiado não resulta mais em vazamento do fragmento adiado. (I2ec7d, b/276375110).
  • Os novos callbacks onBackStackChangeStarted e onBackStackChangeCommitted agora só enviam um fragmento uma única vez, mesmo que várias transações contenham o mesmo fragmento. (Ic6b69).

Versão 1.6.0-alpha09

5 de abril de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha09. A versão 1.6.0-alpha09 contém estas confirmações.

Mudanças na API

  • O DialogFragment agora oferece acesso ao ComponentDialog subjacente pela API requireComponentDialog(). (I022e3, b/234274777).
  • As APIs de fragmento commitNow(), executePendingTransactions() e popBackStackImmediate() foram anotadas com @MainThread, o que significa que agora elas vão gerar erros de build quando não forem chamadas pela linha de execução principal, em vez de esperar uma falha no tempo de execução. (Ic9665, b/236538905).

Correções de bugs

  • Correção de um bug em FragmentManager em que salvar e restaurar no mesmo frame podia causar uma falha (Ib36af, b/246519668).
  • Os callbacks OnBackStackChangedListener onBackStackChangeStarted e onBackStackChangeCommitted agora são executados apenas quando a backstack FragmentManager é alterada. (I66055, b/274788957).

Versão 1.6.0-alpha08

22 de março de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha08. A versão 1.6.0-alpha08 contém estas confirmações.

Mudança de comportamento

  • O tempo do callback OnBackStackChangedListener.onBackStackChangeCommited foi ajustado para ser executado antes das operações de fragmento. Isso garante que o callback nunca seja transmitido para um fragmento que foi desconectado. (I66a76, b/273568280).

Correções de bugs

  • Do Fragment 1.5.6: foi corrigido um problema em que chamar clearFragmentResultListener dentro de um setFragmentResultListener não funcionava se o Lifecycle já estivesse STARTED e um resultado já estivesse disponível (If7458).

Atualizações de dependência

Versão 1.6.0-alpha07

8 de março de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha07. A versão 1.6.0-alpha07 contém estas confirmações.

Correções de bugs

  • Do Fragment 1.5.6: foi corrigido um problema em que a remoção de qualquer fragmento, mesmo que tivesse adicionado itens de menu ou não, invalidava o menu da atividade. (50f098, b/244336571).

Versão 1.6.0-alpha06

22 de fevereiro de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha06. A versão 1.6.0-alpha06 contém estas confirmações.

Mudança de comportamento

  • O novo callback onBackStackChangedStarted no onBackStackChangedListener de FragmentManager agora será executado antes que os fragmentos comecem a se mover para os estados de destino. (I34726).

Versão 1.6.0-alpha05

8 de fevereiro de 2023

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha05. A versão 1.6.0-alpha05 contém estas confirmações.

Novos recursos

  • A interface FragmentManager.OnBackStackChagnedListener agora oferece dois callbacks extras, o onBackStackChangeStarted e o onBackStackChangeCommitted, que permitem ter mais informações e controle quando ocorrerem mudanças na backstack no FragmentManager (Ib7ce5, b/238686802).

Mudanças na API

  • As APIs Fragment e FragmentManager que usam uma Intent ou uma IntentSender agora recebem a anotação @NonNull corretamente para evitar a transmissão de um valor nulo, já que ele sempre causa uma falha nas respectivas APIs do framework do Android que esses métodos chamam (I06fd4).

Versão 1.6.0-alpha04

7 de dezembro de 2022

Lançamento de androidx.fragment:fragment-*:1.6.0-alpha04. A versão 1.6.0-alpha04 contém estas confirmações.

Novos recursos

  • FragmentStrictMode adicionou uma nova WrongNestedHierarchyViolation que detecta quando um fragmento filho está aninhado dentro da hierarquia de visualização do elemento pai, mas não foi adicionado ao childFragmentManager do pai (I72521, b/249299268).

Mudanças de comportamento

  • Agora, os fragmentos restauram o estado SavedStateRegistry antes de onAttach(), garantindo que ele esteja disponível em todos os métodos de ciclo de vida ascendente (I1e2b1).

Mudanças na API

  • O artefato fragment-testing-manifest separa as entradas do manifesto dos outros componentes do teste de fragmentos. Isso significa que é possível usar:
debugImplementation("androidx.fragment:fragment-testing-manifest:X.Y.Z")
androidTestImplementation("androidx.fragment:fragment-testing:X.Y.Z")

Isso evita conflitos devido a um desvio da versão entre fragment-testing e androidx.test (I8e534, b/128612536).

Correções de bugs

  • Do Fragment 1.5.5: os fragmentos não vão mais salvar incorretamente o estado ViewModel como parte do estado salvo do registro de visualização (I10d2b, b/253546214).

Versão 1.6.0-alpha03

5 de outubro de 2022

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

Mudanças na API

  • As classes que estendem DialogFragment agora precisam chamar Super nas substituições de onDismiss() (I14798, b/238928865).

Correções de bugs

  • Foram corrigidas as regressões causadas pela integração das novas interfaces de callback do provedor (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) para garantir que os fragmentos sempre recebam os callbacks adequados (I9b380, I34581, I8dfe6, b/242570955, If9d6b, Id0096, I690b3, I2cba2).

Versão 1.6.0-alpha02

24 de agosto de 2022

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

Correções de bugs

  • Do Fragment 1.5.2: foi corrigido um problema em que a execução de uma transação popBackStack() e replace() ao mesmo tempo fazia com que os fragmentos de saída executassem Animation/Animator errados (Ib1c07, b/214835303).

Versão 1.6.0-alpha01

27 de julho de 2022

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

Mudanças de comportamento

  • O estado salvo dos Fragments foi totalmente dividido entre o estado da biblioteca particular (classes Parcelable personalizadas) e o estado fornecido pelo desenvolvedor, que agora é sempre armazenado em um Bundle que permite determinar exatamente a origem do estado de um fragmento (b/207158202).

Correções de bugs

  • Do Fragment 1.5.1: foi corrigida uma regressão no DialogFragmentCallbacksDetector em que o uso da versão do lint empacotada com o AGP 7.4 fazia com que ele falhasse (b/237567009).

Atualização de dependências

Versão 1.5

Versão 1.5.7

19 de abril de 2023

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

Correções de bugs

  • O uso de postponeEnterTransition com um tempo limite e a substituição do fragmento adiado não resulta mais em vazamento do fragmento adiado (I2ec7d, b/276375110).

Versão 1.5.6

22 de março de 2023

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

Correções de bugs

  • Correção de um problema em que a remoção de qualquer fragmento, tivesse itens de menu adicionados ou não, invalidava o menu da atividade. (50f098, b/244336571).
  • Correção de um problema em que chamar clearFragmentResultListener dentro de uma setFragmentResultListener não funcionaria se o Lifecycle já fosse STARTED e um resultado já estivesse disponível (If7458).

Versão 1.5.5

7 de dezembro de 2022

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

Correções de bugs

  • Os fragmentos não vão mais salvar incorretamente o estado ViewModel como parte do estado salvo do registro de visualização (I10d2b, b/253546214).

Versão 1.5.4

24 de outubro de 2022

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

Correções de bugs

  • Foi corrigido um erro em que o uso de um FragmentController personalizado com um host que não implementa uma interface de callback do provedor (OnConfigurationChangedProvider, OnMultiWindowModeChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider) e a chamada da função de envio descontinuada falhavam ao enviar para fragmentos filhos (I9b380).

Versão 1.5.3

21 de setembro de 2022

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

Correções de bugs

  • Foi corrigido um erro que fazia com que os fragmentos na pilha de retorno recebessem callbacks onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() e onConfigurationChanged() (I34581, I8dfe6, b/242570955).
  • Os fragmentos filhos aninhados não vão mais receber vários callbacks onMultiWindowModeChanged(), onPictureInPictureModeChanged(), onLowMemory() ou onConfigurationChanged() (I690b3, Id0096, If9d6b, I2cba2).

Versão 1.5.2

10 de agosto de 2022

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

Correções de bugs

  • Foi corrigido um problema em que a execução de uma transação popBackStack() e uma replace() ao mesmo tempo fazia com que os fragmentos de saída executassem Animation/Animator errados (Ib1c07, b/214835303).

Versão 1.5.1

27 de julho de 2022

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

Correções de bugs

  • Foi corrigida uma regressão no DialogFragmentCallbacksDetector em que o uso da versão do lint empacotada com o AGP 7.4 fazia com que ele falhasse (b/237567009).

Atualização de dependências

Versão 1.5.0

29 de junho de 2022

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

Mudanças importantes desde a versão 1.4.0

  • Integração de CreationExtras: a Fragment agora pode fornecer uma interface ViewModelProvider.Factory sem estado usando a classe CreationExtras do Lifecycle 2.5.0.
  • Integração da caixa de diálogo do componente: DialogFragment agora usa ComponentDialog usando a Activity 1.5.0 como caixa de diálogo padrão retornada por onCreateDialog().
  • Refatoração do estado de instância salvo: os fragmentos começaram a mudar a forma como salvam o estado da instância. Isso é um esforço para ajudar a identificar adequadamente qual estado foi salvo no fragmento e a origem dele. As mudanças atuais incluem o seguinte:
    • A classe FragmentManager agora armazena o estado de instância salvo em um Bundle em vez de diretamente em um Parcelable personalizado.
    • Os resultados definidos pelas Fragment Result APIs que ainda não foram entregues são salvos separadamente do estado interno da FragmentManager.
    • O estado associado a cada fragmento individual agora é salvo separadamente do estado interno da classe FragmentManager. Assim, você pode correlacionar a quantidade de estados salvos associados a um fragmento individual com os IDs exclusivos presentes na geração de registros de depuração de Fragment.

Outras mudanças

  • FragmentStrictMode agora possibilita que fragmentos particulares de terceiros ignorem penalidades de violações específicas usando allowViolation() com o nome da classe.
  • O uso das APIs Fragment para oferecer um menu à ActionBar da atividade foi descontinuado. As APIs MenuHost e MenuProvider adicionadas na Activity 1.4.0 fornecem uma superfície de API equivalente testável e com reconhecimento do ciclo de vida que os fragmentos precisam usar.

Versão 1.5.0-rc01

11 de maio de 2022

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

Refatoração de estado da instância salva

Versão 1.5.0-beta01

20 de abril de 2022

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

Mudanças na API

  • A classe DialogFragment adicionou um novo método dismissNow que usa commitNow para oferecer paridade com a função showNow. Isso não faz com que a classe Dialog seja dispensada imediatamente, apenas que ela atualize o estado da FragmentManager de forma síncrona (I15c36, b/72644830).

Refatoração de estado da instância salva

  • A classe FragmentManager agora armazena o estado de instância salvo em um Bundle em vez de diretamente em um Parcelable personalizado. Essa é a primeira etapa para oferecer mais transparência sobre o que realmente está sendo salvo pelos fragmentos (I93807, b/207158202).
  • Os resultados definidos pelas APIs Fragment Result que ainda não foram entregues são salvos separadamente do estado interno da FragmentManager. Isso permite mais transparência sobre os resultados que estão sendo salvos como parte do estado salvo da instância (I6ea12, b/207158202).

Versão 1.5.0-alpha05

6 de abril de 2022

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

Mudanças na API

Versão 1.5.0-alpha04

23 de março de 2022

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

Mudanças na API

  • As APIs Fragment que oferecem um menu à ActionBar da atividade foram descontinuadas por fazerem acoplamento rígido entre o fragmento e a atividade, o que as impede de serem testadas de forma isolada. As APIs MenuHost e MenuProvider adicionadas na Activity 1.4.0-alpha01 fornecem uma superfície de API equivalente testável e com reconhecimento do ciclo de vida que os fragmentos precisam usar (I50a59, I20758).

Correções de bugs

  • A SavedStateViewFactory agora oferece suporte ao uso de CreationExtras mesmo quando inicializada com um SavedStateRegistryOwner. Se extras forem fornecidos, os argumentos inicializados serão ignorados (I6c43b, b/224844583).

Versão 1.5.0-alpha03

23 de fevereiro de 2022

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

Mudanças na API

  • Agora é possível transmitir CreationExtras para as funções by viewModels() e by activityViewModels() (Ibefe7, b/217601110).

Mudanças de comportamento

Versão 1.5.0-alpha02

9 de fevereiro de 2022

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

Novos recursos

  • FragmentStrictMode agora possibilita que fragmentos particulares de terceiros ignorem penalidades de violações específicas usando allowViolation() com o nome da classe (I8f678).

Versão 1.5.0-alpha01

26 de janeiro de 2022

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

Novos recursos

Correções de bugs

  • Do Fragment 1.4.1: FragmentContainerView não gera mais uma exceção de estado ilegal quando os IDs de visualização gerados com base em XML têm valores negativos (Ic185b, b/213086140).
  • Do Fragment 1.4.1: ao usar uma lambda ownerProducer personalizada com a função lenta de by viewModels(), ela usa a defaultViewModelProviderFactory desse proprietário se uma ViewModelProvider.Factory personalizada não for fornecida, em vez de sempre usar a fábrica do fragmento (I56170, b/214106513).
  • Uma falha ao acessar um ViewModel pela primeira vez de um callback registerForActivityResult() de um Fragment foi corrigida (Iea2b3).

Versão 1.4

Versão 1.4.1

26 de janeiro de 2022

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

Correções de bugs

  • FragmentContainerView não gera mais uma exceção de estado ilegal quando os IDs de visualização gerados com base em XML têm valores negativos (Ic185b, b/213086140).
  • Ao usar uma lambda ownerProducer personalizada com a função lenta de by viewModels(), ela usa a defaultViewModelProviderFactory desse proprietário se uma ViewModelProvider.Factory personalizada não for fornecida, em vez de sempre usar a fábrica do fragmento (I56170, b/214106513).

Versão 1.4.0

17 de novembro de 2021

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

Mudanças importantes desde a versão 1.3.0

  • 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 Consulte StrictMode para fragmentos.
  • 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

    val navController = binding.container.getFragment<NavHostFragment>().navController
    
  • O FragmentScenario agora implementa o Closeable, permitindo o uso com o método use do Kotlin ou com try-with-resources

  • Foi adicionado o FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} para especificar se a animação padrão de transição de atividades do tema usado será ativada na transição de fragmentos

  • A API experimental de FragmentManager.enableNewStateManager(boolean) foi removida, e o novo gerenciador de estado agora é a única opção disponível

Várias backstacks

O FragmentManager mantém uma backstack composta de transações de fragmentos que usaram addToBackStack(). Isso permite remover 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 três novas APIs do FragmentManager: saveBackStack(String name), restoreBackStack(String name) e clearBackStack(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. 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 vai remover 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 vai fazer 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 saveBackStack(), restoreBackStack() e clearBackStack(), que restauram ou limpam, respectivamente, uma pilha de retorno salva anteriormente, as duas não vão fazer nada se você não tiver chamado saveBackStack() com o mesmo nome.

Para ver mais informações, consulte Várias backstacks: análise detalhada (link em inglês).

Versão 1.4.0-rc01

3 novembro de 2021

A versão androidx.fragment:fragment:1.4.0-rc01 foi lançada sem mudanças com relação à Fragment 1.4.0-beta01. A versão 1.4.0-rc01 contém estas confirmações.

Versão 1.4.0-beta01

27 de outubro de 2021

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

Correções de bugs

  • Os fragmentos pai agora enviam onHiddenChanged() a toda a hierarquia antes de iniciar o próprio callback (Iedc20, b/77504618).
  • Agora, o teclado é fechado automaticamente ao navegar de um fragmento com um teclado aberto a um com uma visualização de reciclagem (I8b842, b/196852211).
  • O DialogFragment agora usa o método setReorderingAllowed(true) para todas as transações criadas ao chamar os métodos show(), showNow() ou dismiss() (Ie2c14).
  • O aviso de lint longo foi reduzido de DetachAndAttachFragmentInSameFragmentTransaction para DetachAndAttachSameFragment (e9eca3).

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ária a separação 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

  • 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

  • Foi corrigido 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 (I9039f).
  • Foi corrigido um problema em que o FragmentManager mantinha uma cópia do estado salvo anteriormente pelo método saveBackStack(), mesmo depois dele ter sido restaurado (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

  • Foi corrigido um problema em que a chamada para saveBackStack() como parte do suporte a várias backstacks falhava ao ser executada ao mesmo tempo que uma FragmentTransaction que usava replace() era executada (I73137).
  • Foi corrigida 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 suporte a várias backstacks. Isso também corrigiu um problema em que setReorderingAllowed(true) não era verificado para todas as transações (I8c593).
  • Foi corrigido um problema em que FragmentManager restaurava estados de fragmentos salvos mesmo depois de 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: foi corrigida 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 transitionName ou background), e os elementos compartilhados não geram mais IndexOutOfBoundsExceptions (I16484, b/188679569, b/188969304).
  • O FragmentManager não falha mais quando você tenta 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 oferece suporte à isenção de classes Fragment específicas de Violations no modo restrito, possibilitando que essa classe ignore penalidades (Ib4e5d, b/184786736).

  • A classe Violation de FragmentStrictMode 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
    
  • Foi adicionado o FragmentTransaction#TRANSIT_FRAGMENT_MATCH_ACTIVITY_{OPEN, CLOSE} 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 remover 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. 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 vai remover 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 vai fazer 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 vão usar 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 vai 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 vão mais ser enviados indefinidamente, corrigindo problemas com instâncias da BottomNavigationBar e do FloatingActionButton (I1bb78, b/186012452).
  • No Fragment 1.3.4 e versões mais recentes: agora você pode extrair 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 vai ser feita corretamente (I99675).

Contribuição externa

Versão 1.3

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 vai mais falhar 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

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

  • Foi corrigida 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 transitionName ou background), e os elementos compartilhados não geram mais IndexOutOfBoundsExceptions (I16484, b/188679569, b/188969304).

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 vão usar 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 vai 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 vai ser feita corretamente (I99675).

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

  • Foi corrigida uma regressão introduzida no Fragment 1.3.2, que fazia com que as animações popEnter não fossem executadas ao remover 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

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

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

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: foi adicionado suporte à 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. Confira 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 do suporte para a transmissão de resultados entre dois Fragments com novas APIs em FragmentManager. Isso funciona para fragmentos de hierarquia (pai/filho), DialogFragments e fragmentos na navegação e garante que os resultados sejam enviados para seu fragmento apenas enquanto o estado dele for pelo menos STARTED (iniciado). O uso das APIs de fragmento de destino foi descontinuado em favor dessas novas APIs. Consulte Receber resultados usando a API Fragment Result.

  • FragmentOnAttachListener: o uso do callback onAttachFragment() em FragmentActivity e Fragment foi descontinuado. Um novo FragmentOnAttachListener foi adicionado para oferecer uma alternativa mais flexível, permitindo a delegação de onAttachFragment() para listeners testáveis separados e suporte ao acréscimo de um listener a FragmentManagers que não sejam o FragmentManager do 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 oferece suporte para a configuração de um Lifecycle.State inicial para possibilitar 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.
  • Suporte a ViewTree: Fragment agora oferece suporte às 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.

  • Descontinuação de setRetainInstance(): o uso do método setRetainInstance() em Fragments foi descontinuado. 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.

  • Descontinuação 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 descontinuado. 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

  • Foi corrigido 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 mostrados acima de um fragmento da caixa de diálogo mãe (I30806, b/177439520).
  • Foi corrigido o 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 o Lifecycle alcance CREATED (criado), 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

  • Foi corrigido um 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 remoção por destaque (I952d8).
  • Foi corrigido 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 remoção e de substituição na mesma transação de fragmento agora vai mostrar 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 o suporte binário de origem com o 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

  • Foi corrigido 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 tinham 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, 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 oferece suporte à 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 particulares (aosp/1425237).

Correções de bugs

  • Agora, os fragmentos inflados que usam a tag <fragment> vão esperar da forma correta até que as visualizações sejam adicionadas a um contêiner antes de serem movidos para o estado STARTED (iniciado) (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 vão ter um FragmentManager não nulo, e fragmentos com um FragmentManager não nulo sempre vão ser 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 vai permanecer invisível (b/164481490).
  • Agora, os fragmentos priorizam Animators em vez de Animations, o que significa que um fragmento com ambos vai executar apenas o Animator e vai 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 substituiria todos os efeitos de Transition ou em que 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).
  • Foi corrigido um problema em que o FragmentManager executaria operações fora de ordem, misturando uma transação reordenada adiada e uma transação não reordenada (b/147297731).
  • Remover vários fragmentos simultaneamente por destaque não vai fazer mais com que os fragmentos intermediários fiquem temporariamente visíveis ao serem adiados (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 deixar silenciosamente de 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 oferece suporte à configuração de um estado inicial do Lifecycle de CREATED (criado), STARTED (iniciado) ou RESUMED (retomado), em vez de sempre mover o fragmento para o estado RESUMED (retomado) (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 descontinuado. Um novo FragmentOnAttachListener foi adicionado para oferecer uma alternativa mais flexível, permitindo a delegação de onAttachFragment() para listeners testáveis separados e suporte ao 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).
  • Foi corrigido 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, descontinuados anteriormente, 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 suporte para transmitir resultados entre dois fragmentos usando novas APIs em FragmentManager. Isso funciona para fragmentos de hierarquia (pai/filho), DialogFragments e fragmentos na navegação e garante que os resultados sejam enviados para seu fragmento apenas enquanto o estado dele for pelo menos STARTED (iniciado) (b/149787344).

Mudanças na API

  • O uso das APIs de fragmento de destino foi descontinuado. 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() em Fragment foi descontinuado. 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).
  • Foi corrigido 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).
  • Foi corrigido 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

  • Foi adicionado suporte à 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() foi descontinuado. 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 fazer a remoção assim que o callback onCreate() for recebido (b/144309266).

Correções de bugs

  • Do Fragment 1.2.3: foi corrigido 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: foram corrigidos 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 foi descontinuado. 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 foram descontinuadas. 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).
  • Foi corrigido um problema em que fragmentos retidos adicionados após o estado ser salvo não eram recriados continuamente e destruídos com 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

  • Foi corrigido um bug em DialogFragment que causava um StackOverflowError ao chamar getLayoutInflater() em 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).
  • Foram corrigidos falsos positivos na verificação de lint UseRequireInsteadOfGet ao usar um nome de variável local que ocultava 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 de OnBackPressedDispatcher em onCreateView(), onViewCreated() e onActivityCreated() (b/142117657).
  • Foi adicionada 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

  • Os arquivos do Fragment ProGuard foram corrigidos para evitar avisos de R8 (b/148963981).
  • A verificação de lint existente foi melhorada, 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).
  • Foi corrigido 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 atividade já foi 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 estas confirmações.

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 oferece suporte para 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 a conclusão das 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) antes de chamar onDestroyView().
  • add() e replace() baseado em classe: foram adicionadas 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 fragmento.
  • Novas verificações de lint: nova verificação de lint que garante o uso de getViewLifecycleOwner() ao observar LiveData de onCreateView(), onViewCreated() ou onActivityCreated().
  • Descontinuação de getFragmentManager(): os métodos getFragmentManager() e requireFragmentManager() na API Fragment foram descontinuados e substituídos por um único método getParentFragmentManager(), que retorna o valor não nulo FragmentManager ao qual o fragmento é adicionado. Você pode usar isAdded() para determinar se é seguro fazer a chamada.
  • Descontinuação de FragmentManager.enableDebugLogging(): o uso do método estático FragmentManager.enableDebugLogging foi descontinuado. 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

  • Foi corrigida 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 fragmentos agora são movidos corretamente para CREATED (criado) 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

  • Foi corrigida uma mudança de comportamento não intencional em que fragmentos que foram removidos ainda eram retornados por findFragmentById()/findFragmentByTag() enquanto as animações/transições de saída deles fossem 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).
  • Foi corrigido um problema em que as visualizações eram incorretamente marcadas como INVISIBLE (invisível) depois de remover um fragmento 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 a descontinuação de setUserVisibleHint() (b/143897055).
  • Documentação aprimorada sobre setFragmentFactory() e getFragmentFactory() para indicar melhor que a configuração de FragmentFactory também vai 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 no Fragment 1.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 tem suporte ao atributo class, além de android:name, espelhando a funcionalidade da tag <fragment> (b/142722242).
  • Foi adicionada uma nova verificação de lint que garante que você está usando getViewLifecycleOwner() ao observar o 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 fragmento definido por class ou android:name como parte da inflação, garantindo que findFragmentById() e findFragmentByTag() funcionem imediatamente depois (b/142520327).
  • Foi corrigida uma IllegalStateException em FragmentContainerView quando o estado estava sendo salvo (b/142580713).
  • Foi 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

  • Foi 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 suporte à adição de um fragmento inicial que aceite 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

  • Uma ClassCastException ao usar androidx.transition foi corrigida (b/140680619).
  • Agora, ao usar Transition 1.3.0-beta01, os fragmentos aguardam as transições de androidx.transition, além das animações e transições de framework, que foram corrigidas no Fragment 1.2.0-alpha03 e Fragment 1.2.0-alpha02, respectivamente, serem concluídas antes de enviar onDestroyView() (aosp/1119841).
  • Ao usar Transition 1.3.0-beta01, os fragmentos agora cancelam as transições androidx.transition corretamente antes de iniciar novas transições/animações no mesmo contêiner (aosp/1119841).
  • Foi corrigido um problema na API 17 e versões anteriores ao usar transições androidx.transition na visualização raiz do fragmento 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).
  • O uso de Log.w no FragmentManager foi removido (aosp/1126468).

Problemas conhecidos

  • O método 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

  • Os métodos getFragmentManager() e requireFragmentManager() em Fragment foram descontinuados e substituídos por um único getParentFragmentManager(), que retorna o valor não nulo FragmentManager ao qual o fragmento é adicionado. Você pode usar isAdded() para determinar se a chamada é segura (b/140574496).
  • O uso do método estático FragmentManager.enableDebugLogging foi descontinuado. 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 fragmentos são destruídos corretamente enquanto as animações de saída em outros fragmentos estão em execução (b/140574199).
  • Foi corrigido um problema em que fragmentos chamavam Activity.findViewById() em locais que antes não chamavam (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 neste link.

Mudanças na API

Correções de bugs

  • FragmentContainerView agora inverte a ordem de exibição corretamente ao destacar fragmentos da backstack (b/139104187).
  • Foi corrigido um problema em que a animação errada era executada ao remover um fragmento e adicionar outro ao mesmo tempo (b/111659726).
  • Agora, os fragmentos 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 fragmentos 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 fragmentos (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).
  • Foram adicionadas anotações @MainThread aos callbacks de ciclo de vida de Fragment (b/127272564).
  • O uso das APIs relacionadas ao título da navegação estrutural em FragmentTransaction e FragmentManager.BackStackEntry foi descontinuado (b/138252944).
  • O uso do método setTransitionStyle em FragmentTransaction foi descontinuado (aosp/1011537).
  • Vários 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ê vai continuar recebendo 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 fragmentos removidos por destaque 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: foi 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 fragmentos filhos e descendentes são tratadas corretamente ao animar o fragmento pai (b/116675313).
  • Foi corrigida uma NullPointerException ao usar transições de elementos compartilhados e combinar operações de remoçã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, o FragmentManager chama requestApplyInsets() depois de anexar a visualização do fragmento e logo antes de chamar onViewCreated(), garantindo que sua visualização tenha sempre as inserções corretas (b/135945162).

Correções de bugs

  • Correção de uma NullPointerException ao remover 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() descontinuada. 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 fragmentos removidos 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

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

  • Foi 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).
  • Correção de uma NullPointerException ao remover 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, o aninhamento dos callbacks de androidx.lifecycle.Lifecycle (relacionados especificamente com STARTED, RESUMED, PAUSED, STOPPED e DESTROYED) para fragmentos aninhados é feito 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 neste link.

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 fragmento filho agora são removidos corretamente quando o fragmento 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. faça um upgrade para a Preferences 1.1.0-alpha05 ao usar essa versão do Fragments.

Novos recursos

  • Foi adicionada uma nova sobrecarga de postponeEnterTransition(), que usa um tempo limite. Depois disso, o fragmento chama startPostponedEnterTransition() automaticamente (b/120803208).

Mudanças na API

  • Alteração interruptiva: o método instantiate de FragmentFactory, anteriormente descontinuado e que usava 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 é 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 do ciclo de vida para um fragmento chamando setMaxLifecycle() em uma FragmentTransaction. Isso substitui a setUserVisibleHint() descontinuada. 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 o nível 24 ou mais recente da API (b/129880016).

Mudanças de comportamento

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

Correções de bugs

  • Corrigido um problema ao usar uma tag <fragment> em XML e o construtor contentLayoutId de FragmentActivity ou AppCompatActivity (b/129907905).
  • Foi corrigido um problema em que os fragmentos na backstack não eram movidos para pelo menos CREATED (criado) 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).
  • Foi corrigida uma falha em restoreSaveState causada por uma dessincronização dos fragmentos retidos depois do estado da instância ser salvo (b/130433793, aosp/947824).
  • Foram corrigidos problemas em que um OnBackPressedCallback adicionado com um ciclo de vida do fragmento não era chamado se o FragmentManager tivesse uma backstack. Consulte androidx.activity 1.0.0-alpha07 para mais detalhes. (aosp/948209).
  • Os fragmentos não aplicam mais LAYER_TYPE_HARDWARE para animações. Se você precisar especificamente de uma animação da camada de hardware, faça a definição dela 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 foi descontinuado, 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 foi descontinuado (b/127971835).
  • getThemedContext() do FragmentActivity foi removido (aosp/934078).

Correções de bugs

  • Foi corrigida uma regressão em 1.1.0-alpha05 que fazia com que o fragmento 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).
  • Foi corrigido um problema ao usar construtores @ContentView na sua atividade ao restaurar o estado do fragmento (b/127313094).
  • Foi corrigida a lógica de setTargetFragment() ao substituir um fragmento de destino existente por um fragmento 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).
  • Foi 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

  • Foi adicionado suporte à 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

  • Foi adicionado um método requireArguments() que retorna um @NonNull Bundle ou gera uma IllegalStateException (b/121196360).
  • Foi adicionada uma observação de que getLifecycle(), getViewLifecycleOwner() e getViewLifecycleOwnerLiveData() não podem ser substituídos e serão considerados como finais em uma futura versão. 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 substituindo esse método atualmente (aosp/880713).
  • Foi corrigido um problema de suporte binário a versões anteriores de Fragments (aosp/887877) (aosp/889834).

Correções de bugs

  • Os fragmentos de destino são limpos corretamente quando você transmite null para setTargetFragment() (aosp/849969).
  • Foi corrigido um problema em que fragmentos 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 extrair o ViewModelStoreOwner, permitindo transmitir o fragmento 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.
  • Adição de um método requireView() que retorna um @NonNull View ou gera uma IllegalStateException (b/120241368).
  • Foi adicionado um método requireParentFragment() que retorna um @NonNull Fragment ou gera uma IllegalStateException (b/112103783).

Correções de bugs

  • Foi corrigida a IllegalStateException: falha ao salvar o estado (b/120814739).
  • Agora, os Fragments restaurados do estado da instância salva sempre recebem um Bundle não nulo (b/119794496).
  • Os fragmentos 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 uma lambda para a construção do fragmento como uma alternativa à transmissão em uma instância FragmentFactory (aosp/812913).

Correções de bugs

  • Foi corrigida uma IllegalStateException ao usar fragmentos aninhados na backstack (b/119256498).
  • Corrigida uma falha ao usar FragmentScenario.recreate() com FragmentFactory (aosp/820540).
  • Foi corrigido um problema em que os fragmentos de destino não podiam ser acessados depois que o fragmento 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

  • Foi corrigido um problema que causava falhas nas operações de fragmentos 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.