Navegação

Navigation é um framework para navegar entre "destinos" em um app Android que oferece uma API consistente, independentemente dos destinos serem implementados como fragmentos, atividades ou outros componentes.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
13 de novembro de 2024 2.8.4 - - 2.9.0-alpha03

Declarar dependências

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

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

Groovy

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  id 'org.jetbrains.kotlin.plugin.serialization' version '2.0.21'
}
  
dependencies {
  def nav_version = "2.8.4"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:$nav_version"

  // Views/Fragments Integration
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Feature module support for Fragments
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // JSON serialization library, works with the Kotlin serialization plugin.
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3"
}

Kotlin

plugins {
  // Kotlin serialization plugin for type safe routes and navigation arguments
  kotlin("plugin.serialization") version "2.0.21"
}

dependencies {
  val nav_version = "2.8.4"

  // Jetpack Compose integration
  implementation("androidx.navigation:navigation-compose:$nav_version")

  // Views/Fragments integration
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Feature module support for Fragments
  implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")

  // Testing Navigation
  androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")

  // JSON serialization library, works with the Kotlin serialization plugin
  implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}

Safe Args

Para adicionar Safe Args ao seu projeto, inclua o seguinte classpath no seu arquivo build.gradle de nível superior:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.8.4"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.8.4"
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
    }
}

Você também precisa aplicar um dos dois plug-ins disponíveis.

Para gerar um código de linguagem Java adequado para módulos Java ou Java e Kotlin mistos, adicione esta linha ao arquivo build.gradle do seu app ou módulo:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

Como alternativa, para gerar o código Kotlin adequado para módulos somente Kotlin, adicione:

Groovy

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

Você precisa ter android.useAndroidX=true no arquivo gradle.properties, como mostrado em Migrar para o AndroidX.

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.

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

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas 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 2.9

Versão 2.9.0-alpha03

13 de novembro de 2024

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

Novos recursos

  • A segurança do tipo de navegação agora oferece suporte a classes de valor como uma rota ou como o tipo de argumento de uma rota. (I9344a, b/374347483).

Correções de bugs

  • Correção de um ConcurrentModificationException que poderia ocorrer quando um LifecycleObserver anexado a um NavBackStackEntry aciona uma mudança na backstack quando o LifecycleOwner do host, como a atividade ou o fragmento que contém, muda o estado do ciclo de vida. (Ia9494).

Versão 2.9.0-alpha02

30 de outubro de 2024

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

Contribuição externa

  • Novo método NavController.handleDeepLink(request: NavDeepLinkRequest) comum. Agradecemos, Konstantin Tskhovrebov. (I3e228).

Versão 2.9.0-alpha01

16 de outubro de 2024

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

Novos recursos

  • Os navegadores personalizados agora podem marcar os destinos como implementados na interface SupportingPane, o que indica ao NavController que esses destinos serão mostrados com outros. Com essa interface, vários destinos podem ser RESUMED ao mesmo tempo, por exemplo. (Id5559).
  • Em Navigation 2.8.3: foram adicionadas novas verificações de lint para os módulos navigation-common, navigation-runtime e navigation-compose para ajudar a identificar rotas com segurança de tipo que não foram corretamente anotadas com @Serializable. Essa verificação é aplicada a todas as funções de extensão NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816).
  • Em Navigation 2.8.3: foram adicionadas novas verificações de lint para os módulos navigation-common, navigation-runtime e navigation-compose para ajudar a identificar rotas com segurança de tipo com argumentos de enumeração que não são anotados corretamente com @Keep. Essa verificação é aplicada a todas as funções de extensão NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142).

Mudanças de comportamento

  • A tentativa de usar um NavController que já foi DESTROYED vai causar um IllegalStateException. (I520da, b/369616172).

Correções de bugs

  • A exceção de não localização da classe Enum foi atualizada para sugerir o uso da anotação @Keep caso a classe Enum seja apagada em builds minificados. (I90e79, b/358137294).

Problemas conhecidos

  • Há um problema com as novas regras de lint que foram adicionadas ao Navigation 2.8.*, que causam um erro Obsolete custom lint check ao tentar executar o lint com o Plug-in do Android para Gradle 8.4 ou mais recente (b/368070326, b/371463741).

Versão 2.8

Versão 2.8.4

13 de novembro de 2024

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

Novos recursos

Correções de bugs

Versão 2.8.3

16 de outubro de 2024

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

Novos recursos

  • Foram adicionadas novas verificações de lint para os módulos navigation-common, navigation-runtime e navigation-compose para ajudar a identificar rotas com segurança de tipo que não foram corretamente anotadas com @Serializable. Essa verificação é aplicada a todas as funções de extensão NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I28bda, b/362725816).
  • Foram adicionadas novas verificações de lint para os módulos navigation-common, navigation-runtime e navigation-compose para ajudar a identificar rotas com segurança de tipo com argumentos de enumeração que não são anotados corretamente com @Keep. Essa verificação é aplicada a todas as funções de extensão NavGraphBuilder e NavDeepLinkBuilder. (I4a259, I95402, Ie601a, Id8c6e, I2b46f, b/358687142).

Correções de bugs

  • Correção de um problema em que as novas regras de lint adicionadas em Navigation 2.8.* causavam um erro Obsolete custom lint check ao tentar executar o lint com o Plug-in do Android para Gradle 8.4 ou mais recente. (I1be3d, b/368070326, b/371463741).

Problemas conhecidos

  • O lint de navegação vai gerar um erro de verificação de lint personalizada obsoleta ao tentar executar o lint com o Lint 16 (AGP 8.7) ou mais recente. (b/371926651).

Versão 2.8.2

2 de outubro de 2024

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

Novos recursos

  • A segurança de tipo de navegação agora oferece suporte a classes serializáveis que incluem Double, Double?, DoubleArray, DoubleArray?, List<Double> e List<Double>? sem exigir NavType personalizado. (I570eb, Ibc4c0, I37461, I5bed4, b/359245753).

Correções de bugs

  • Melhoria na mensagem de erro quando o Google Maps não consegue mapear o argumento de uma rota para um NavType. A nova mensagem de erro vai conter o nome do argumento, o nome totalmente qualificado do argumento e o nome totalmente qualificado da rota. (Id8416, b/346264232).

Versão 2.8.1

18 de setembro de 2024

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

Novos recursos

  • Foi adicionada uma nova regra de lint para garantir o uso da função popBackStack, que recebe um tipo de classe reificado ao tentar popBackStack usando APIs com segurança de tipo (Ief161, b/358095343).

Correções de bugs

  • Agora, a navegação exige que a rota transmitida para o startDestination de um NavGraph contenha os valores de todos os argumentos obrigatórios, incluindo argumentos que não podem ser nulos e não têm valor padrão. (I18e74, b/362594265).
  • O Safe Args de navegação adicionou suporte a strings não anuláveis, de modo que os valores "null" sejam analisados e armazenados no pacote como estão. Isso se afasta do comportamento atual em que os valores "null" são analisados em um objeto nulo. Essa mudança só se aplica a tipos de String não nulos. As strings Nullable permanecem inalteradas. (I08b4a, b/348936238).
  • Não é mais possível criar links diretos para um NavDestination, exceto por um link direto que foi adicionado explicitamente ao destino. Isso também significa que você só pode navegar até a rota de um destino com a sobrecarga da função de navegação que usa uma rota de string. Isso corrige uma vulnerabilidade que permitia criar links diretos para um destino potencialmente protegido. (Ie30e6).

Atualização de dependências

  • O Navigation Safe Args agora depende do Kotlin 1.9.24, em vez do Kotlin 2.X, garantindo que os desenvolvedores não sejam forçados a atualizar. (a4129a).
  • O Navigation Compose agora depende do Compose 1.7.2.

Versão 2.8.0

4 de setembro de 2024

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

Mudanças importantes desde a versão 2.7.0

Segurança de tipos da DSL do Kotlin para navegação

  • Agora, a navegação oferece segurança de tipo para a DSL do Kotlin (usada pelo Navigation Compose) usando a serialização do Kotlin para permitir que você defina destinos no gráfico de navegação usando objetos e classes de dados com segurança de tipo:
    // Define a home destination that doesn't take any arguments
    @Serializable
    object Home

    // Define a profile destination that takes an ID
    @Serializable
    data class Profile(val id: String)

    // Now define your NavHost using type safe objects
    NavHost(navController, startDestination = Home) {
        composable<Home> {
            HomeScreen(onNavigateToProfile = { id ->
                navController.navigate(Profile(id))
            })
        }
        composable<Profile> { backStackEntry ->
            val profile: Profile = backStackEntry.toRoute()
            ProfileScreen(profile)
        }
    }

Consulte a postagem do blog sobre o encontro entre o Navigation Compose e a segurança de tipo para mais informações.

Navigation Compose Predictive Back

  • O Navigation Compose agora oferece suporte à volta preditiva no app usando as novas APIs SeekableTransitionState do compose-animation. Isso permite que você use o gesto "Voltar" para conferir o destino anterior com sua transição personalizada antes de decidir se vai confirmar a transação com o gesto concluído ou cancelá-la.

Combinável de fragmento de navegação

  • Foi adicionado um novo artefato navigation-fragment-compose que inclui uma alternativa ComposableNavHostFragment para NavHostFragment, permitindo adicionar destinos combináveis aos arquivos XML de navegação. Cada destino composable precisa ser expresso como um método @Composable de nível superior sem argumentos, cujo nome totalmente qualificado é usado como o atributo android:name em cada destino. Ao navegar para um desses destinos, um fragmento de contêiner é criado para mostrar o conteúdo combinável.
  // In HomeScreen.kt
  @Composable
  fun HomeScreen() {
    // Your Composable content here
  }

  // In your navigation.xml
  <composable
    android:id="@+id/home_screen"
    android:name="com.example.HomeScreenKt\$HomeScreen" />

Outras mudanças

  • O Navigation Compose agora depende do Compose 1.7.0.
  • O Navigation agora oferece uma nova classe CollectionNavType<T>, uma subclasse de NavType<T> para argumentos baseados em coleções, como listas, matrizes e mapas. Todas as matrizes NavType padrão (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType e StringArrayType) agora herdam dessa nova classe.
  • Agora, NavType tem suporte integrado para listas de Int, String, Boolean, Float e Long.

Versão 2.8.0-rc01

21 de agosto de 2024

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

Correções de bugs

  • Correção da falha de navegação ao transmitir classes de enumeração de nível superior como argumentos seguros de tipo. (I0ba76, b/358137294).
  • A Navigation 2.8 agora funciona corretamente com o SDK 34 e não será trocada para o SDK 35 até a versão 2.9 ser lançada junto com o restante das bibliotecas do AndroidX. (b/358798728).

Versão 2.8.0-beta07

7 de agosto de 2024

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

Problemas conhecidos

  • Devido a b/358137294, apenas os tipos enumerados aninhados em outra classe têm suporte imediato. Os tipos enumerados de nível superior terão suporte na próxima versão.

Correções de bugs

  • Ao navegar para destinos duplicados ou compartilhados, a navegação prioriza o destino correspondente mais próximo do local atual no gráfico. (Ic89a4, b/352006850).
  • A navegação em safe args agora adicionou um novo NavType.EnumType. Isso significa que os tipos Enum não precisam mais de NavTypes personalizados. O SerialName do Enum precisa ser o nome totalmente qualificado padrão. (I66d22, b/346475493).
  • A navegação em safe args adicionou suporte integrado a tipos de argumentos anuláveis,incluindo Int?, Long?, Float?, Boolean? e Enum<*>?. (I32d13,I1c580,Ifba66,I978b0,Ide076 , b/351994237).
  • O startDestination do NavGraph vai usar os valores de argumento padrão se a rota startDestination transmitida para o NavGraph for exatamente igual ao startDestination.route. (I13762, b/354046047).

Versão 2.8.0-beta06

24 de julho de 2024

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

Correções de bugs

  • Foi corrigido um problema em que as verificações de lint WrongStartDestinationType não verificavam objetos Companion no tipo de classe transmitido, fazendo com que o lint não detectasse o erro. (I92b09).

Versão 2.8.0-beta05

10 de julho de 2024

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

Correções de bugs

  • Correção de falha de navegação singleTop quando NavGraphs aninhados compartilham o mesmo trajeto startDestination (I17b94, b/294408596).

Versão 2.8.0-beta04

26 de junho de 2024

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

Correções de bugs

  • A navegação agora oferece suporte a strings vazias em argumentos de caminho. (Ic5dbd, b/339481310).
  • Melhoria da mensagem de erro para serializadores personalizados declarados diretamente em campos de classe usando @Serializable(with =...) para esclarecer que esse é um recurso sem suporte no momento. (I052b0, b/341319151).
  • A API de teste SavedStateHandleFactory agora pode ser usada em testes que não são do Android, mas exige que o Robolectric ofereça suporte à análise de argumentos com pacotes. (I76cdc, b/340966212).
  • Correção de falha ao restaurar o estado ao retomar o app após o término do processo com o uso da navegação com segurança de tipo no Compose. (Ia8f38, b/341801005).
  • Correção de um problema no Navigation Compose em que, depois de cancelar o gesto de volta preditivo, o NavBackStackEntry que o usuário retornava nunca voltava ao estado de ciclo de vida RESUMED Isso também garante que o destino de retorno seja animado corretamente em vez de ser fixado no lugar após um movimento brusco. (I97a0c, b/346608857).
  • Ao usar a volta preditiva com o Navigation Compose, o destino que está sendo aberto agora terá a ordem z adequada, animando corretamente em cima do destino de entrada. (I2077b, b/345993681).

Versão 2.8.0-beta03

12 de junho de 2024

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

Mudanças na API

  • CollectionNavType tem um novo método abstrato emptyCollection(). Substitua isso para processar uma coleção vazia transmitida como um argumento. (Ie4d84, b/341723133).

Correções de bugs

  • Foi adicionada documentação sobre NavType.serializeAsValue e serializeAsValues para destacar que as saídas finais precisam ser codificadas por URI. (Ida6bd, b/344943214).
  • Correção de uma falha ao chamar toRoute<T> com um argumento CollectionNavType nulo. Ao navegar com um CollectionNavType nulo, o argumento de saída será o valor padrão declarado na classe Serializable ou o valor de retorno de emptyCollection() se não houver um valor padrão. (I84158, Id630f, b/342672856).

Versão 2.8.0-beta02

29 de maio de 2024

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

Correções de bugs

  • Correção de uma falha de ClassCastException ao usar NavBackStackEntry.toRoute com um NavType personalizado anulável (I1c29b, b/342239473).
  • Correção de problemas de restauração do estado da backstack de navegação causados ao tentar restaurar uma entrada da backstack que não pode ser alcançada pelo id do destino atual. Como as rotas são apoiadas por IDs, os destinos criados com rotas também foram afetados. Isso também corrige uma falha causada pela chamada de clearBackStack() que tinha o mesmo problema. (I423c3, b/339908057).

Versão 2.8.0-beta01

14 de maio de 2024

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

Mudanças na API

  • SavedStateHandle.toRoute() agora usa um parâmetro typeMap para tipos de argumentos personalizados. (Ie39fb, b/339026523).
  • Uma API de teste foi adicionada a navigation-testing para criar um SavedStateHandle de um objeto serializável do Kotlin. (Id4867, b/339080702).

Correções de bugs

  • Foram adicionadas as informações de parâmetro ausentes para as funções da DSL Kotlin de navegação. (I26a36).

Versão 2.8.0-alpha08

1º de maio de 2024

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

Safe Args no Navigation Compose

Essa funcionalidade usa a serialização do Kotlin para permitir que você defina destinos no gráfico de navegação usando objetos com segurança de tipo e classes de dados:

  // Define a home destination that doesn't take any arguments
  @Serializable
  object Home

  // Define a profile destination that takes an ID
  @Serializable
  data class Profile(val id: String)

  // Now define your NavHost using type safe objects
  NavHost(navController, startDestination = Home) {
      composable<Home> {
          HomeScreen(onNavigateToProfile = { id ->
              navController.navigate(Profile(id))
          })
      }
      composable<Profile> { backStackEntry ->
          val profile: Profile = backStackEntry.toRoute()
          ProfileScreen(profile)
      }
  }

Consulte a postagem do blog sobre o encontro entre o Navigation Compose e a segurança de tipo para mais informações.

Novos recursos

  • O artefato navigation-fragment-compose agora fornece um local de composição LocalFragment para métodos combináveis em um ComposableFragment. (If35e5).
  • Agora, NavType tem suporte integrado para listas de Int, String, Boolean, Float e Long. (I4b6dd, Ia914c, b/188693139).

Versão 2.8.0-alpha07

17 de abril de 2024

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

Novos recursos

  • Adiciona um novo artefato navigation-fragment-compose que inclui uma alternativa ComposableNavHostFragment para NavHostFragment, permitindo adicionar destinos composable aos arquivos XML de navegação. Cada destino composable precisa ser expresso como um método @Composable de nível superior sem argumentos, cujo nome totalmente qualificado é usado como o atributo android:name em cada destino. Ao navegar para um desses destinos, um fragmento de contêiner é criado para mostrar o conteúdo combinável. (I0ef2e, b/265480755).

    // In HomeScreen.kt
    @Composable
    fun HomeScreen() {
      // Your Composable content here
    }
    
    // In your navigation.xml
    <composable
      android:id="@+id/home_screen"
      android:name="com.example.HomeScreenKt\$HomeScreen" />
    

Mudanças na API

Versão 2.8.0-alpha06

3 de abril de 2024

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

Mudanças na API

Correções de bugs

  • NavHost agora usa Alignment.TopStart como o argumento padrão contentAlignment. Isso alinha o padrão para AnimatedContent e corrige algumas instâncias de uma escala inesperada da transição central. (I09e72, b/330111602).
  • Ao deslizar o gesto de volta preditiva enquanto usa o Navigation Compose, o NavHost agora conclui corretamente a transição personalizada em vez de terminar imediatamente. (I99017, b/327292110).

Versão 2.8.0-alpha05

20 de março de 2024

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

Novos recursos

  • Agora é possível transmitir argumentos para o startDestination de NavGraph diretamente na rota startDestination sem depender de defaultValue. Isso também se aplica a startDestinations NavGraph aninhados. (I0e0b5, b/109505019, b/188693139).

Mudanças na API

  • Foi adicionada uma nova classe CollectionNavType<T> abstrata, uma subclasse de NavType<T> para argumentos baseados em coleções, como listas, matrizes e mapas. (Ic6d63, b/188693139).
  • Todas as matrizes NavType padrão (IntArrayType, LongArrayType, FloatArrayType, BoolArrayType e StringArrayType) agora são do tipo CollectionNavType (Idcf79, b/188693139).
  • A NavType agora oferece uma nova API valueEquals aberta que determina se dois valores do mesmo tipo são iguais. (I6cb97, b/327229511).

Correções de bugs

  • Os parâmetros de consulta em links diretos agora permitem valores na forma de chaves ao redor do nome do argumento (por exemplo, {argName}) como valores válidos para NavTypes baseado em string. Isso corrige um problema em que esse valor era considerado inválido (ou ausência de valor) para todos os tipos. (I18302, b/327274038).
  • As funções NavController que oferecem suporte a rotas, como navigate ou popBackStack, agora podem corresponder corretamente a rotas preenchidas com argumentos de NavTypes de matriz. (Iea805, b/327229511).

Versão 2.8.0-alpha04

6 de março de 2024

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

Novos recursos

  • Agora é possível especificar o SizeTranform para suas transições no Navigation Compose definindo-as como parte da inicialização das funções composable e/ou navigation. (I91062, b/296912651).

Correções de bugs

  • Correção de um problema em que o NavHost na navegação do Compose não mostrava corretamente a transição ao usar o botão "Voltar" do sistema sem um gesto (Iceeae, b/325998468).

Versão 2.8.0-alpha03

21 de fevereiro de 2024

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

Mudanças na API

  • NavBackStackEntry.savedStateHandle agora está marcado como @MainThread, porque usa um código que precisa estar na linha de execução principal. (Ibb988, b/299523245).

Correções de bugs

  • Correção de um problema na navegação que fazia com que os ViewModels NavGraph fossem DESTROYED muito cedo porque o ViewModel da entrada associada não fazia parte do estado salvo. (Ib6bb7, b/317581849).

Atualização de dependências

Versão 2.8.0-alpha02

7 de fevereiro de 2024

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

Novos recursos

  • O Navigation Compose agora oferece suporte à volta preditiva no app usando as novas APIs SeekableTransitionState do compose-animation. Isso permite que você use o gesto "Voltar" para conferir o destino anterior com sua transição personalizada antes de decidir se vai confirmar a transação com o gesto concluído ou cancelá-la. (I8b8e9).

Versão 2.8.0-alpha01

24 de janeiro de 2024

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

Correções de bugs

  • Correção de vazamento de BackStackState em que várias chamadas saveState em um destino resultavam na gravação de vários estados, mas apenas o primeiro podia ser restaurado. (I598b0, b/309559751).
  • Correção de um problema em que os argumentos que não são de string não eram mostrados corretamente ao usar os auxiliares NavigationUI para preencher o título das barras de apps (636, b/316676794).

Atualização de dependências

Contribuição externa

  • Agradecemos a SimonMarquis por corrigir o problema de exibição de argumentos que não são strings ao usar os auxiliares NavigationUI para preencher o título das barras de apps.

Versão 2.7.7

Versão 2.7.7

7 de fevereiro de 2024

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

Correções de bugs

  • Retorno de Navigation 2.8.0-alpha01: correção de vazamento de BackStackState em que várias chamadas de saveState() em um único NavBackStackEntry resultavam na gravação de vários estados, mas apenas o primeiro estado salvo podia ser restaurado. (I598b0, b/309559751).
  • Retorno da Navigation 2.8.0-alpha01: correção de um problema em que os argumentos que não são de string não eram mostrados corretamente ao usar os helpers NavigationUI para preencher o título das barras de apps. (636, b/316676794).

Contribuição externa

  • Agradecemos a SimonMarquis por corrigir o problema de exibição de argumentos que não são strings ao usar os auxiliares NavigationUI para preencher o título das barras de apps.

Versão 2.7.6

Versão 2.7.6

13 de dezembro de 2023

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

Correções de bugs

  • A função equals() NavGraph agora considera corretamente os nós do outro gráfico, em vez de apenas o que faz a chamada. Isso garante que gráficos com nós com IDs diferentes não sejam mais considerados iguais (I401cb, b/311414915).

Versão 2.7.5

Versão 2.7.5

1º de novembro de 2023

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

Melhorias de desempenho

  • Melhoramos muito a performance (em termos de tempo e número de alocações) da comparação de dois gráficos. Isso significa que chamadas como setGraph, que comparam internamente o novo gráfico com o existente, são muito mais rápidas e resultam em menos frames ignorados. Agradecemos a Michał Z pela análise detalhada que levou a essa melhoria. (I6ad62).
  • O NavHost agora renderiza o destino inicial na primeira passagem de composição, em vez de precisar esperar a segunda passagem ler o estado atualizado. (I439a7, b/304852206).

Correções de bugs

  • Correção de um problema em que a backstack era mostrada se você chamasse setGraph mais de uma vez com o mesmo gráfico, apenas se houvesse um destino no gráfico que continha uma ação que vinculava dois destinos (Ieaed7).
  • As caixas de diálogo que foram navegadas e dispensadas em rápida sucessão não serão mais incluídas na lista de NavController.visibleEntries. (I67586, b/287969970).
  • Quando uma entrada é aberta após uma mudança de configuração, o ViewModel da entrada agora será limpo corretamente se saveState for falso. (Idf242, b/298164648).
  • Correção de um problema em que NavController podia processar o mesmo link direto mais de uma vez se a backstack estivesse totalmente vazia antes de uma mudança de configuração ou chamada para setGraph apenas quando a intent recebida tivesse a flag FLAG_ACTIVITY_NEW_TASK definida. (I73c7f).

Atualizações de dependência

  • A navegação com fragmentos agora depende do Fragment 1.6.2, corrigindo um problema em que as instâncias de ViewModel de fragmentos aninhados não eram limpas ao chamar clearBackStack.

Versão 2.7.4

Versão 2.7.4

4 de outubro de 2023

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

Novos recursos

  • Foi adicionado suporte para que popUpTo use rotas com argumentos para permitir o retorno a uma entrada específica que usa esses argumentos, correspondendo ao suporte encontrado em popBackStack. (I731f4, b/299255572).

Correções de bugs

  • Correção do problema em que interromper uma navegação com outra navegação com popUpTo faz com que a FragmentNavigator falhe (I3c848, b/301887045).
  • Correção de um problema em que o pressionamento de retorno do sistema fazia com que o currentDestination não fosse atualizado corretamente para corresponder ao fragmento exibido (Id0d6c, b/289877514).
  • O ciclo de vida DialogFragment agora vai passar corretamente para o estado RESUMED quando a caixa de diálogo acima dele for dispensada. (I88f0d, b/301811387).

Versão 2.7.3

Versão 2.7.3

20 de setembro de 2023

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

Correções de bugs

  • Correção de um problema na navegação com fragmentos que fazia com que a lista visibleEntries contivesse entradas incorretas (I5caa9, b/288520638).
  • Correção de um problema que fazia com que o destino da janela flutuante (por exemplo, Dialogs, Bottomsheets etc.) nunca recebesse um callback de ciclo de vida RESUMED. (I3b866, b/287505132).

Versão 2.7.2

Versão 2.7.2

6 de setembro de 2023

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

Correções de bugs

  • A navegação agora depende do Lifecycle 2.6.2, corrigindo uma interação entre rememberSaveable e NavHost do Navigation Compose que impediria que o estado rememberSaveable dos destinos e todas as instâncias SavedStateHandle de ViewModel fossem restauradas corretamente após a interrupção e recriação do processo. (b/298059596, b/289436035).
  • Correção de um problema ao mostrar várias caixas de diálogo no Navigation Compose simultaneamente, em que as caixas de diálogo parcialmente ocultas (por exemplo, não a caixa de diálogo mais alta) estavam no estado de ciclo de vida CREATED em vez do estado STARTED. (aosp/2728520, b/289257213).
  • Foi corrigido um problema ao mostrar várias caixas de diálogo no Compose de navegação simultaneamente, em que dispensar a caixa de diálogo principal fazia com que a nova caixa de diálogo principal ficasse presa no estado de ciclo de vida STARTED em vez de migrar corretamente para RESUMED. (aosp/2629401, b/286371387).
  • O Navigation Safe Args não instancia mais a tarefa ansiosamente se ela não estiver sendo executada. (I0e385, b/260322841).

Atualização de dependências

  • O Navigation Compose agora depende do Compose 1.5.1.

Versão 2.7.1

Versão 2.7.1

23 de agosto de 2023

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

Correções de bugs

  • Correção de um problema na navegação com o Compose em que, ao usar um Scaffold, era possível receber um erro ao tentar acessar um ViewModel Lifecycle.State.DESTROYED (I1dc11, b/268422136).

Versão 2.7.0

Versão 2.7.0

9 de agosto de 2023

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

Mudanças importantes desde a versão 2.6.0

Animações do Accompanist

Agora que o AnimatedContent está estável, conseguimos mover o código da animação de navegação do Accompanist de volta para o Navigation Compose.

Isso significa que todo o suporte para configuração de transições personalizadas que existia em AnimatedNavHost é diretamente compatível com NavHost.

Não serão feitas outras mudanças na animação de navegação do Accompanist, e ela será oficialmente descontinuada em breve, com orientações sobre como migrar de volta para o Compose de navegação. No entanto, será o inverso do guia de migração, sem outras mudanças de API necessárias se você já estiver usando a versão alfa mais recente do Accompanist (0.31.2-alpha). (b/197140101)

Correções de bugs

  • O NavHost no Navigation Compose agora intercepta corretamente as chamadas de retorno do sistema, mesmo depois que a atividade foi INTERROMPIDA e RETOMADA. (Icb6de, b/279118447).

Atualizações de dependência

  • A navegação agora depende do Compose 1.5.0 a partir de 1.1.0.

Versão 2.7.0-rc01

26 de julho de 2023

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

Correções de bugs

  • Correção de um problema em que as lambdas EnterTransition e ExitTransition criadas como parte do NavHost podiam permanecer na memória mesmo depois que o NavHost era removido da composição (I893d0).

Problemas conhecidos

  • Há um problema na Navigation 2.6.x que, ao navegar com popUpTo, pode causar uma IllegalArgumentException. É possível evitar essa exceção reestruturando seu gráfico, de forma semelhante ao conselho sugerido aqui. (b/287133013).

Versão 2.7.0-beta02

28 de junho de 2023

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

Correções de bugs

  • O Navigation Compose agora tem a ordem z correta para transições personalizadas que usam a navegação com a opção popUpTo (/Ib1c3a, b/285153947).

Versão 2.7.0-beta01

7 de junho de 2023

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

Correções de bugs

  • O NavHost no Navigation Compose agora intercepta corretamente as chamadas de retorno do sistema, mesmo depois que o Activity foi STOPPED e RESUMED. (Icb6de, b/279118447).

Versão 2.7.0-alpha01

24 de maio de 2023

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

Animações do Accompanist

Agora que o AnimatedContent está estável, conseguimos mover o código da animação de navegação do Accompanist de volta para o Navigation Compose.

Isso significa que todo o suporte para configuração de transições personalizadas que existia em AnimatedNavHost é diretamente compatível com NavHost.

Não serão feitas outras mudanças na animação de navegação do Accompanist, e ela será oficialmente descontinuada em breve, com orientações sobre como migrar de volta para o Compose de navegação. No entanto, será o inverso do guia de migração, sem outras mudanças de API necessárias se você já estiver usando a versão alfa mais recente do Accompanist (0.31.2-alpha). (b/197140101)

Correções de bugs

  • No Navigation 2.6.0-rc02: correção de um problema com a navegação em fragmentos em que a navegação com popUpTo e a exibição de um fragmento da backstack sem recriar a visualização faziam com que o sistema voltasse a funcionar (Ieb8d4, b/281726455).

Atualizações de dependência

  • A navegação agora depende do Compose 1.5.0-beta01.

Versão 2.6.0

Versão 2.6.0

7 de junho de 2023

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

Mudanças importantes na navegação desde a versão 2.5.0

  • O arguments do NavBackStackEntry e o arguments transmitidos para um OnDestinationChangedListener agora são apenas uma cópia dos argumentos imutáveis que foram criados ao navegar para o destino. Isso significa que as mudanças feitas nesses pacotes não vão ser aplicadas nos acessos subsequentes às instâncias arguments ou outras OnDestinationChangedListener.
  • NavDeepLink agora oferece suporte a valores padrão para matrizes, o que permite suporte para o mapeamento de parâmetros de consulta repetidos para o tipo de matriz do argumento. NavType agora também inclui um método padrão que pode ser substituído para combinar dois valores analisados
  • As subclasses personalizadas de NavType agora podem modificar serializeAsValue para serializar um valor em uma string, permitindo que a serialização e desserialização (via parseValue) sejam totalmente encapsuladas na classe NavType. StringType agora substitui esse método para chamar Uri.encode no String especificado

Mudanças importantes no Navigation Compose desde a versão 2.5.0

  • Ao visualizar um elemento combinável com NavHost, ele mostra o startDestination do NavGraph por padrão
  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) agora oferecem suporte a rotas com argumentos preenchidos de forma parcial ou total. Os argumentos precisam ser uma correspondência exata com os argumentos da entrada
  • A tentativa de criar um NavDeepLink vazio usando a DSL navDeepLink do Kotlin agora vai resultar em um aviso de lint indicando que um link direto precisa de um URI, ação e/ou tipo MIME para ser válido

Mudanças importantes na navegação com fragmentos desde a versão 2.5.0

  • O NavHostFragment não intercepta mais o botão "Voltar" do sistema. Isso permite que o FragmentManager de base processe a recuperação do sistema. Isso permite que Fragment 1.7.0-alpha01 e versões mais recentes forneçam uma animação de volta preditiva no app em dispositivos Android U.
  • Ao usar a navegação com fragmentos, a tentativa de fazer manualmente uma FragmentTransaction que adiciona um fragmento à backstack da FragmentManager agora gera uma IllegalArgumentException. Sempre adicione fragmentos pela API navigate().
  • Ao usar a string exata ${applicationId} como o marcador nos atributos app:data e app:dataPattern no elemento de atividade de um arquivo XML de navegação, o marcador vai ser preenchido automaticamente com a packageName do contexto com a inflação
  • O FragmentNavigator agora usa as APIs de transição ao navegar e mostrar NavBackStackEntries. Isso significa que o objeto Lifecycle do NavBackStackEntry agora aguarda a conclusão dos efeitos especiais de entrada e saída antes de mudar o Lifecycle.State final
  • O DialogFragmentNavigator agora usa as APIs de transição ao navegar e mostrar NavBackStackEntries. Isso significa que o objeto Lifecycle do NavBackStackEntry vai esperar que o Lifecycle do DialogFragment mude para o estado DESTROYED antes de mudar a si mesmo para DESTROYED
  • NavHostFragment agora permite recuperar o NavController assim que o NavHostFragment é anexado ao FragmentManager, em vez de somente após onCreate().
  • O suporte ao Navigation para módulos de recursos dinâmicos agora depende da biblioteca granular Play Feature Delivery
  • O Safe Args do Navigation agora depende do Plug-in do Android para Gradle versão 7.3.0. Isso significa que ele só é compatível com as versões 7.3.0 e mais recentes.

Mudanças importantes na NavigationUI desde a versão 2.5.0

  • Na transmissão do ID de um gráfico de navegação para AppBarConfiguration (por exemplo, usando um Menu), a NavigationUI agora considera apenas o destino inicial desse gráfico como um nível superior em vez de marcar incorretamente cada destino no gráfico como um destino de nível superior. O comportamento da transmissão do ID de um destino individual não foi alterado. Essa mesma funcionalidade está disponível para seu próprio código com a nova função isTopLevelDestination em AppBarConfiguration
  • As integrações de setupWithNavController em NavigationUI para trabalhar com a barra de apps da parte de cima agora vão analisar os valores R.string dos argumentos ReferenceType encontrados no android:label nos valores de string em vez de transmitir o número inteiro do recurso gerado automaticamente
  • NavigationUI agora fornece registros quando não é possível navegar por um MenuItem selecionado

Versão 2.6.0-rc02

24 de maio de 2023

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

Correções de bugs

  • Correção de um problema com a navegação em fragmentos em que a navegação com popUpTo e a remoção de um fragmento da backstack sem recriar a visualização faziam com que o botão "Voltar" do sistema parasse a não funcionar (Ieb8d4, b/281726455).

Versão 2.6.0-rc01

10 de maio de 2023

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

Correções de bugs

  • Correção de um problema na navegação com fragmentos em que a remoção de um fragmento usando a navegação com popUpTo no callback de ciclo de vida onResume() causava uma IllegalStateException (I21884, b/279644470).

Versão 2.6.0-beta01

19 de abril de 2023

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

Novos recursos

  • NavBackStackEntry agora oferece uma implementação personalizada de toString. (Iff00b).

Correções de bugs

  • Ao usar a navegação com fragmentos, a tentativa de fazer manualmente uma FragmentTransaction que adiciona um fragmento à backstack da FragmentManager agora gera uma IllegalArgumentException. Sempre adicione fragmentos pela API navigate(). (I6d38e).
  • Quando há um navigate que adiciona uma entrada e um popBackStack que a remove no mesmo frame, a entrada superior resultante na backstack agora volta consistentemente para o Lifecycle.State RESUMED. (Id8067, b/276495952).

Versão 2.6.0-alpha09

5 de abril de 2023

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

Correções de bugs

  • Correção de verificações para rota inválida, de modo que, se uma NavDestination contiver NavArgument não nula, a rota desse destino precisará conter marcadores de posição para argumentos com o mesmo nome que a NavArgument não nula. (Ic62bf, b/274697949).
  • As navegações de link direto com base em Action/MimeType agora vão falhar se a operação de navegação não tiver um NavArgument não nulo exigido pelo NavDestination com que o Action/MimeType corresponde. (Ibfa17, b/271777424).
  • Quando NavController define um gráfico com a mesma rota e destinos do gráfico anterior, ele agora substitui corretamente os nós de gráfico atuais e os destinos da backstack por novas instâncias. Isso corrige uma falha ao usar onLaunchSingleTop sem salvar o estado no Navigation Compose. Isso também corrige um erro em que a navegação para destinos associados aos builds do gráfico raiz e à backstack incorreta. (I5bc58, b/275258161, b/275407804).

Versão 2.6.0-alpha08

22 de março de 2023

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

Novos recursos

  • NavHostFragment agora permite recuperar o NavController assim que o NavHostFragment é anexado ao FragmentManager, em vez de somente após onCreate(). (Ic6382, b/220186282).

Correções de bugs

  • Correção de um NullPointerException ao abrir um gráfico aninhado que inclui um argumento não nulo (6b3581, b/249988437).
  • Ao usar o botão "Voltar" do sistema depois de navegar com popUpTo, o estado do NavController vai aparecer na entrada correta. (I3a8ec, b/270447657).
  • Agora, FragmentNavigator vai abrir entradas corretamente quando a backstack for aberta pelo sistema de volta ou popBackStack(), e se a transação usa ou não efeitos para o fragmento (I81bdf).
  • Adicionar fragmentos ao FragmentManager do FragmentNavigator sem usar a navegação não causa mais falhas (b17204, b/274167493).

Atualizações de dependência

Versão 2.6.0-alpha07

8 de março de 2023

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

Correções de bugs

  • As variantes da API getBackStackEntry, popBackStack e clearBackStack que recebem rotas agora recebem padrões de rota com argumentos anuláveis e parâmetros de consulta anuláveis (I22294, b/269302500).
  • Correção de um problema em que chamar clearBackStack() do NavController não limpava o estado salvo no gerenciador de fragmentos associado à backstack limpa (Ic1cce, b/271190202).
  • Correção de uma regressão na versão 2.6.0-alpha06 que fazia com que o MenuItem errado no BottomNavigationView fosse destacado ao usar o "Voltar ao sistema" entre as guias (I634f6, b/270447657).
  • Correção de uma regressão na versão 2.6.0-alpha06 que fazia com que as NavBackStackEntrys não fossem movidas para o estado RESUMED ao usar Animations. (Ib3589, b/269646882).

Versão 2.6.0-alpha06

22 de fevereiro de 2023

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

Novos recursos

  • Ao visualizar um elemento combinável com NavHost, ele mostra o startDestination do NavGraph por padrão (I2b89f).

Mudanças na API

  • Todas as sobrecargas de navigate do NavController agora têm a anotação @MainThread para garantir que elas sejam chamadas na linha de execução principal (I2c0b0, b/263427111).

Correções de bugs

  • Correção de uma falha ao tentar navegar durante o uso da Dynamic Fragment Navigation (I3ee29, b/268360479).
  • Correção de bug em que a navegação para outro fragmento pelo botão "Voltar" do sistema não atualiza a barra da parte de baixo do item selecionado (If559f, b/269044426).

Problemas conhecidos

  • Ao usar a navegação com fragmentos, o ciclo de vida do NavBackStackEntry não consegue alcançar o RESUMED ao usar as APIs Animation. (b/269646882).
  • Ao usar a navegação com fragmentos e navegar com BottomNavigation, se você tentar restaurar uma backstack com várias entradas, o BottomMenuItem não será atualizado corretamente. (b/270447657).
  • Ao usar a Navigation com fragmentos, depois de restaurar o estado, o Lifecycle NavBackStackEntry não recebe DESTROYED quando o fragmento é DESTROYED . (b/270610768).

Versão 2.6.0-alpha05

8 de fevereiro de 2023

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

Novos recursos

  • NavController.popBackStack(route), NavController.getBackStackEntry(route), NavController.clearBackStack(route) agora oferecem suporte a rotas com argumentos preenchidos de forma parcial ou total. Os argumentos precisam ser uma correspondência exata com os argumentos da entrada (Iebd28, Ic678c, I3b37b, b/257514373).
  • O FragmentNavigator agora usa as APIs de transição ao navegar e mostrar NavBackStackEntries. Isso significa que o objeto Lifecycle do NavBackStackEntry agora aguarda a conclusão dos efeitos especiais de entrada e saída antes de mudar o Lifecycle.State final (I3cb19, b/238686802).
  • O DialogFragmentNavigator agora usa as APIs de transição ao navegar e mostrar NavBackStackEntries. Isso significa que o objeto Lifecycle do NavBackStackEntry vai esperar que o Lifecycle do DialogFragment mude para o estado DESTROYED antes de mudar a si mesmo para DESTROYED (I53ee5, b/261213893).

Mudanças na API

  • O NavigatorState agora fornece a API prepareForTransition para permitir que Navigators movam NavBackStackEntries para Lifecycle.States intermediários (I42c21, b/238686802).
  • Agora você pode acessar a backstack associada a um NavGraphNavigator ou um ComposeNavigator usando uma propriedade backstack. O ComposeNavigator agora também expõe o callback onTransitionComplete() para marcar uma NavBackStackEntry que executou uma operação de popBackStack ou navegação como concluída (I02062, I718db, b/257519195).

Correções de bugs

  • O estado do navegador não vai mais funcionar ao usar as APIs push/popWithTransition e quando a entrada já estiver sendo processada (Iadbfa, b/261213893).
  • Ao usar launchSingleTop com um NavGraph aninhado, todos os destinos que começam no destino original para o startDestination vão ser adicionados corretamente apenas para a parte de cima da backstack (Id4bea, b/253256629).
  • A navegação agora substitui corretamente a instância de DialogFragment ao navegar para o mesmo destino com a flag launchSingleTop definida como verdadeira (I45b5a, b/149572817).
  • O SafeArgs do Navigation não vai mais causar um erro de compilação ao usar argumentos com exatamente 19 caracteres (Id60bc, b/257110095).

Versão 2.6.0-alpha04

9 de novembro de 2022

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

Novos recursos

  • As subclasses personalizadas de NavType agora podem modificar serializeAsValue para serializar um valor em uma string, permitindo que a serialização e desserialização (via parseValue) sejam totalmente encapsuladas na classe NavType. StringType agora substitui esse método para chamar Uri.encode no String especificado (Ie5213, b/247637434).
  • NavigationUI agora fornece registros quando não é possível navegar por um MenuItem selecionado (I2af5a, b/247730357).

Correções de bugs

  • Agora, os links diretos de navegação são analisados lentamente em vez de inicializados pelo gráfico, o que pode melhorar a performance do app na inicialização (Iab0ab).
  • Correção da falha causada pela navegação após o link direto para um destino com argumentos padrão nulos (I51c24, b/243183636).

Atualização de dependências

  • O suporte ao Navigation para módulos de recursos dinâmicos agora depende da biblioteca granular Play Feature Delivery (Ib4ddc).
  • O Safe Args do Navigation agora depende do Plug-in do Android para Gradle versão 7.3.0. Isso significa que ele só é compatível com as versões 7.3.0 e mais recentes (I47e49).

Versão 2.6.0-alpha03

24 de outubro de 2022

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

Correções de bugs

  • No Navigation 2.5.3: NavHost não vai mais causar uma NoSuchElementException quando não houver destino disponível para Crossfade compor. Agora, a composição vai ser ignorada (Ieb46e, b/253299416).
  • No Navigation 2.5.3: correção de um problema em que o estado salvo do Compose (por exemplo, os usos de rememberSaveable) não era esquecido e removido quando um destino era retirado da backstack (I64949).

Atualizações de dependência

Versão 2.6.0-alpha02

5 de outubro de 2022

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

Mudanças de comportamento

  • Na transmissão do ID de um gráfico de navegação para AppBarConfiguration (por exemplo, usando um Menu), a NavigationUI agora considera apenas o destino inicial desse gráfico como um nível superior em vez de marcar incorretamente cada destino no gráfico como um destino de nível superior. O comportamento da transmissão do ID de um destino individual não foi alterado. Essa mesma funcionalidade está disponível para seu próprio código com a nova função isTopLevelDestination em AppBarConfiguration (Ie936e, b/238496771).

Correções de bugs

  • O componente navigation:navigation-fragment agora depende da versão 1.5.2 do fragmento (I00ba4).
  • O item de menu selecionado não é mais atualizado durante a navegação para um destino FloatingWindow, como uma caixa de diálogo (I4cde8, b/240308330).

Versão 2.6.0-alpha01

7 de setembro de 2022

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

Novos recursos

  • As integrações de setupWithNavController em NavigationUI para trabalhar com a barra de apps da parte de cima agora vão analisar os valores R.string dos argumentos ReferenceType encontrados no android:label nos valores de string em vez de transmitir o número inteiro do recurso gerado automaticamente (I5f803, b/167959935).
  • NavDeepLink agora oferece suporte a valores padrão para matrizes, o que permite suporte para o mapeamento de parâmetros de consulta repetidos para o tipo de matriz do argumento. NavType agora também inclui um método padrão que pode ser substituído para combinar dois valores analisados (Id68c3, b/209977108).
  • Ao usar a string exata ${applicationId} como o marcador nos atributos app:data e app:dataPattern no elemento de atividade de um arquivo XML de navegação, o marcador vai ser preenchido automaticamente com a packageName do contexto com a inflação (Iaabde, b/234223561).
  • A tentativa de criar um NavDeepLink vazio usando a DSL navDeepLink do Kotlin agora vai resultar em um aviso de lint indicando que um link direto precisa de um URI, ação e/ou tipo MIME para ser válido (I08d2f, b/154038883).

Mudanças na API

  • Foi adicionada a nova função de extensão NavDestination para analisar rótulos dinâmicos com argumentos na forma de android:label="{arg}" em string. Ela oferece suporte a argumentos ReferenceType, analisando valores R.string nos valores de string (I07d89, b/236269380).

Mudanças de comportamento

  • Os arguments do NavBackStackEntry e os arguments transmitidos para um OnDestinationChangedListener agora são apenas uma cópia dos argumentos imutáveis que foram criados ao navegar para o destino. Isso significa que as mudanças feitas nesses pacotes não vão ser aplicadas nos acessos subsequentes às instâncias arguments ou outras OnDestinationChangedListener (I676f5).

Correções de bugs

  • No Navigation 2.5.2: a navegação dinâmica agora tenta instalar corretamente os destinos de atividade de outros módulos antes de navegar até eles (Ia2c16, b/240292838).
  • No Navigation 2.5.2: a navegação agora substitui corretamente a instância do fragmento ao navegar para o mesmo destino e definir a sinalização launchSingleTop como "true" (I5a2f1, b/237374580).
  • No Navigation 2.5.2: correção de IllegalStateException causada ao navegar para um gráfico aninhado duplo que compartilha um pai com um novo destino inicial mostrado (I9f7cb, b/243778589).

Versão 2.5

Versão 2.5.3

24 de outubro de 2022

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

Correções de bugs

  • NavHost não vai mais causar uma NoSuchElementException quando não houver destino disponível para Crossfade compor. Agora, a composição vai ser ignorada (Ieb46e, b/253299416).
  • Correção de um problema em que o estado salvo do Compose (por exemplo, os usos de rememberSaveable) não era esquecido e removido quando um destino era retirado da backstack (I64949).

Versão 2.5.2

7 de setembro de 2022

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

Correções de bugs

  • A navegação dinâmica agora tenta instalar corretamente os destinos de atividade de outros módulos antes de navegar até eles (Ia2c16, b/240292838).
  • O Navigation agora substitui corretamente a instância do fragmento ao navegar para o mesmo destino e definir a sinalização launchSingleTop como "true" (I5a2f1, b/237374580).
  • Correção de IllegalStateException causada ao navegar para um gráfico aninhado duplo que compartilha um pai com um novo destino inicial mostrado (I9f7cb, b/243778589).

Atualização de dependências

Versão 2.5.1

27 de julho de 2022

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

Correções de bugs

  • O Navigation Safe Args não vai mais causar avisos de descontinuação nas classes geradas ao usar tipos de argumento personalizados salvos em um Bundle (Id86ed, b/237725966).

Atualizações de dependência

Versão 2.5.0

29 de junho de 2022

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

Mudanças importantes desde a versão 2.4.0

  • Integração de CreationExtras: a Navigation agora pode fornecer uma interface ViewModelProvider.Factory sem estado usando a classe CreationExtras do Lifecycle 2.5.0.

SafeArgs do Navigation

  • O Navigation Safe Args fez o upgrade da dependência Android Gradle Plugin para usar 7.0.4, não oferecendo mais suporte a versões do AGP anteriores a 7.0.
  • Inclusão de suporte para o atributo build.gradle do namespace, que será usado em vez de applicationId.

Outras mudanças

  • A API visibleEntries não é mais experimental e oferece uma função para recuperar todas as entradas que tenham destinos visíveis de acordo com o NavController.

Versão 2.5.0-rc02

15 de junho de 2022

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

Correções de bugs

  • Foi corrigida uma falha causada pela alternância rápida entre destinos inferiores ao usar o Navigation Compose NavHost (I3979a, b/234054916).
  • O Navigation SafeArgs não vai falhar mais ao usar um applicationIdSuffix e um namespace sem o applicationId ou quando o applicationId e o namespace forem diferentes (I754b1, b/233119646).
  • O NavArgument agora tem uma função toString() personalizada para mostrar os valores internos do argumento (I900a8).

Versão 2.5.0-rc01

11 de maio de 2022

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

Novos recursos

  • Uma nova regra de lint foi adicionada para alertar sobre a inserção de elementos <deeplink> dentro de elementos <activity> no arquivo navigation.xml (Ic15a5, b/178403185).

Correções de bugs

  • Os escopos combináveis em NavHost e DialogHost agora são descartados na ordem esperada, ou seja, os elementos combináveis internos são descartados antes dos elementos externos (I157e6)
  • O SafeArgs do Navigation agora usa PathSensitivity.RELATIVE no ArgumentsGenerationTask para permitir a realocação do cache. Isso significa que a entrada de cache agora pode ser reutilizada de um build de CI para um build local (I5f67c, b/173420454).
  • A regra de lint UnrememberedGetBackStackEntryDetector foi atualizada para garantir que a chamada de remember ao redor da chamada para getBackStackEntry() também transmita um objeto NavBackStackEntry como uma chave (Ib7081, b/227382831).

Versão 2.5.0-beta01

20 de abril de 2022

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

Correções de bugs

  • A DialogNavigator agora usa popWithTransition ao executar uma chamada dismiss(). Isso corrige uma disputa ao usar um ViewModel no destino dialog, que causaria uma IllegalStateException ao dispensar a caixa de diálogo usando o sistema ou tocando fora da caixa de diálogo para sair (Id7376, b/226552301).

Atualizações de dependência

  • O Navigation agora depende do Lifecycle 2.5.0-beta01, corrigindo uma IllegalStateException ao aninhar um NavHost em outro NavHost em uma guia de navegação não primária na parte inferior da tela ao usar várias backstacks.

Versão 2.5.0-alpha04

6 de abril de 2022

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

Mudanças na API

Correções de bugs

  • O NavHost agora depende das visibleEntries do NavController para determinar quais entradas vão ser compostas. Isso significa que, ao usar o NavHost aninhado, o NavHost interno vai ser animado corretamente (I4ba2b, b/225394514).
  • O StateFlow de visibleEntries fornecido pelo NavController agora se baseia no estado máximo do Lifecycle da entrada, em vez de no estado atual. Isso significa que, mesmo que o ciclo de vida do host do navController fique abaixo de "STARTED" (iniciado), a lista de partes visíveis permanece a mesma (I9e2a8, b/225394514).
  • 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).
  • NavDeepLink agora pode analisar URIs com um único parâmetro de consulta sem valor (I0efe8, b/148905489).
  • Strings vazias agora são consideradas argumentos válidos em links diretos (I70a0d, b/217399862).
  • Navigation Safe Args não vai falhar mais quando nenhum AndroidManifest.xml estiver presente ao usar namespaces (I17ccf, b/227229815).

Versão 2.5.0-alpha03

23 de fevereiro de 2022

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

Mudanças na API

  • Agora é possível transmitir CreationExtras a by navGraphViewModels para criar um ViewModel (I29217, b/217618359).

Correções de bugs

  • NavDeepLinks agora oferece suporte aos novos caracteres de linha incorporados em rotas/URIs de link direto (I513d1, b/217815060).
  • CreationExtras agora vai funcionar corretamente quando usado com NavBackStackEntries para criar ViewModels (I69161, b/217617710).
  • O Safe Args de navegação agora oferece suporte ao uso do namespace definido no build.gradle em vez do pacote no AndroidManifest (I659ef, b/217414933).

Versão 2.5.0-alpha02

9 de fevereiro de 2022

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

Correções de bugs

  • No Navigation 2.4.1: o NavHostFragment agora define corretamente a classe OnBackPressedDispatcher ao usar a vinculação de visualizações com gráficos aninhados (Ifbb51, b/214577959).
  • No Navigation 2.4.1: quando os links diretos usam vários NavGraphs aninhados, o backstack inclui corretamente os destinos iniciais intermediários (I504c0, b/214383060).

Versão 2.5.0-alpha01

26 de janeiro de 2022

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

Novos recursos

Correções de bugs

  • Um problema em que o acesso a um ViewModel criado por by navGraphViewModels() do método onCreate() de um fragmento falhava com uma IllegalStateException foi corrigido (I8a14d).
  • NavDeepLinks não vão decodificar mais desnecessariamente os argumentos duas vezes, ou seja, os argumentos adequados agora vão ser transmitidos para o destino final (I31b0a, b/210711399).

Safe Args

  • O Safe Args agora depende do Plug-in do Android para Gradle versão 7.0.4. Isso significa que o Navigation Safe Args não é mais compatível com as versões do Android Studio anteriores à 7.0, mas agora é compatível com o Plug-in do Android para Gradle 7.1.0 e versões mais recentes (I41c88, b/213086135, b/207670704).

Versão 2.4.2

Versão 2.4.2

6 de abril de 2022

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

Correções de bugs

Versão 2.4.1

Versão 2.4.1

9 de fevereiro de 2022

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

Correções de bugs

  • O NavHostFragment agora define corretamente a classe OnBackPressedDispatcher ao usar a vinculação de visualizações com gráficos aninhados (Ifbb51, b/214577959).
  • Agora, quando há links diretos usando vários NavGraphs aninhados, a pilha de retorno inclui corretamente destinos iniciais intermediários (I504c0, b/214383060).
  • Backport do Navigation 2.5.0-alpha01: correção de um problema em que o acesso a um ViewModel criado pelo by navGraphViewModels() usando o onCreate() de um fragmento falhava com uma IllegalStateException (I8a14d).
  • Backport do Navigation 2.5.0-alpha01: NavDeepLinks deixaram de decodificar argumentos desnecessariamente duas vezes, ou seja, os argumentos decodificados da maneira correta agora vão ser transmitidos para o destino final (I31b0a, b/210711399).
  • Backport do Navigation 2.5.0-alpha01: o Safe Args agora depende do Plug-in do Android para Gradle versão 7.0.4. Isso significa que o Navigation Safe Args não oferece mais suporte a versões do Android Studio anteriores à 7.0, mas agora é compatível com o Plug-in do Android para Gradle 7.1.0 e versões mais recentes (I41c88, b/213086135, b/207670704).

Versão 2.4.0

Versão 2.4.0

26 de janeiro de 2022

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

Mudanças importantes desde a versão 2.3.0

  • Todos os artefatos de navegação foram reescritos em Kotlin. Isso melhorou a nulidade de classes usando a generalização (como subclasses NavType). Todas as funções de extensão do Kotlin que costumavam fazer parte dos artefatos -ktx foram movidas para os respectivos artefatos principais. Os artefatos -ktx vão continuar sendo publicados, mas estão completamente vazios
  • O artefato navigation-fragment agora contém uma implementação pré-criada de um layout de dois painéis pelo novo AbstractListDetailFragment. Esse fragmento usa um SlidingPaneLayout para gerenciar um painel de lista (que a subclasse fornece) e um painel de detalhes, que usa um NavHostFragment como implementação, conforme mostrado no nosso exemplo de implementação.
  • O método currentBackStackEntryAsFlow() no NavController fornece um Flow que é emitido sempre que a NavBackStackEntry atual muda. Esse fluxo pode ser usado como uma alternativa ao gerenciamento manual de um OnDestinationChangedListener
  • O NavController agora permite extrair uma lista de todas as instâncias NavBackStackEntry visíveis como um StateFlow usando a propriedade visibleEntries experimental.
  • Agora é possível estender a classe NavType para criar NavTypes personalizados. Só há suporte para tipos personalizados ao criar o gráfico de navegação de maneira programática, por exemplo, usando a DSL do Kotlin para gráficos de navegação.
  • A navegação agora fornece APIs findStartDestination() e getHierarchy() que podem ser usadas para ajudar a implementar a NavigationUI personalizada. findStartDestination() é uma função de extensão de NavGraph que localiza o destino inicial real que é exibido quando você navega até o gráfico, mesmo que o startDestination seja um NavGraph aninhado. A getHierarchy() é uma função do NavDestination que pode ser usada para verificar se determinado destino está na hierarquia de outro.

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Os métodos da NavigationUI que usavam uma BottomNavigationView foram atualizados para usar a superclasse NavigationBarView, introduzida no Material 1.4.0. Isso permite que esses métodos sejam usados com NavigationRailView.

  • Ao inflar um elemento <action> via XML, os atributos de animação podem usar atributos extraídos do tema com a sintaxe app:enterAnim="?attr/transitionEnter".

  • O Safe Args agora gera um método fromSavedStateHandle() para cada classe NavArgs (#122 (link em inglês), b/136967621).

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    

Rotas de navegação e a DSL do Kotlin

As versões anteriores do componente de navegação dependiam de cada destino ter um ID de constante inteiro que o identificava exclusivamente em destinos irmãos e permitiam que você enviasse navigate() diretamente para esse destino ou por uma ação. Embora isso continue sendo válido e útil, principalmente nos casos em que você define o gráfico de navegação em XML e pode usar constantes R.id geradas automaticamente ou o Safe Args, que usa essas constantes para gerar código durante a compilação, esse sistema de números inteiros únicos não capturava o significado semântico e a expressividade necessária para oferecer suporte a gráficos totalmente dinâmicos criados programaticamente durante a execução pela DSL de navegação do Kotlin.

Esta versão introduz uma nova opção para identificar exclusivamente um destino em um gráfico de navegação pela rota dele. Uma rota é uma String que define o caminho exclusivo de um destino. Todos os métodos da DSL do Kotlin que receberam um ID de destino foram descontinuados e substituídos por uma API equivalente que usa uma rota.

Cada rota precisa ser tratada como a parte "path" (caminho) de um Uri que define o destino, por exemplo, home, profile/{userId}, profile/{userId}/friends etc. Quando a identidade de um destino é associada a um conteúdo específico, esses argumentos dinâmicos precisam fazer parte do trajeto, seguindo as mesmas regras de links diretos implícitos.

Todas as APIs NavController que recebiam apenas um ID agora têm uma sobrecarga que usa uma String de rota. Isso inclui navigate(), popBackStack(), popUpTo() e getBackStackEntry().

Isso teve algumas implicações na API:

  • A propriedade popUpTo na DSL do Kotlin foi descontinuada e substituída por popUpToId.
  • A API getStartDestination() foi descontinuada e substituída por getStartDestinationId().

Diferente da navegação por ID, a navegação por rota segue as mesmas regras dos links diretos implícitos, em que é possível navegar diretamente para qualquer destino em qualquer gráfico aninhado, garantindo que essas rotas sejam utilizáveis em vários módulos sem adicionar explicitamente um link direto visível externamente para cada destino.

Navigation Compose

O artefato navigation-compose fornece integração entre o componente de navegação e o Jetpack Compose. Ele usa funções @Composable como destinos no aplicativo.

Novidades desta versão:

  • Um elemento NavHost combinável que permite construir o gráfico de navegação com uma DSL do Kotlin, usando destinos composable e dialog, além de suporte a navegadores opcionais, como os do Material de navegação do Accompanist.
  • Suporte obrigatório com fading cruzado entre destinos. A Animação de navegação do Accompanist pode ser usada para controlar as transições de entrada e saída usando APIs experimentais do Compose.
  • Escopo de um Lifecycle para cada destino de composição. Cada destino só chega ao estado RESUMED (retomado) quando uma transição de entrada termina e cai imediatamente em STARTED (iniciado) quando uma transição de saída começa, permitindo que você evite todos os problemas de IllegalStateException e multitoque, acionando apenas uma chamada navigate quando o Lifecycle for RESUMED (retomado).
  • Escopo de ViewModel (pela API viewModel() do Lifecycle ViewModel Compose 2.4.0 ou hiltViewModel() do Hilt Navigation Compose 1.0.0 no nível de destino), fornecendo um escopo que sobrevive a mudanças de configuração e ficando na backstack (quando o conteúdo de composição é descartado) e um sinal no onCleared() do ViewModel que indica o descarte permanente e a limpeza do estado associado à NavBackStackEntry.
  • Escopo do estado rememberSaveable no nível do destino, garantindo que todo o estado combinável seja salvo e restaurado automaticamente quando você retornar a um destino.
  • Suporte total ao salvamento e à restauração do estado do NavController e o estado do destino após a interrupção e a recriação do processo.
  • Integração automática com o botão "Voltar" do sistema.
  • Suporte à transmissão de argumentos, anexação de links diretos para destinos e retorno de um resultado para destinos anteriores.

  • Auxiliares específicos do Compose em rememberNavController() e currentBackStackEntryAsState() para permitir a elevação do estado e conectar NavController a elementos combináveis fora do NavHost, como uma barra de navegação inferior.

val navController = rememberNavController()
Scaffold { innerPadding ->
    NavHost(navController, "home", Modifier.padding(innerPadding)) {
        composable("home") {
            // This content fills the area provided to the NavHost
            HomeScreen()
        }
        dialog("detail_dialog") {
            // This content will be automatically added to a Dialog() composable
            // and appear above the HomeScreen or other composable destinations
            DetailDialogContent()
        }
    }
}

Consulte o guia de navegação do Compose para ver mais informações.

Várias backstacks

O NavController é responsável por gerenciar a backstack dos destinos, adicionando destinos a ela quando o método navigate() navega até eles e os removendo ao chamar popBackStack() ou acionar o botão "Voltar" do sistema. A classe NavOptions existente e a integração com elementos <action> no XML dos gráficos de navegação foram expandidas para oferecer suporte ao salvamento e à restauração da backstack.

Como parte dessa mudança, os métodos NavigationUI de onNavDestinationSelected(), BottomNavigationView.setupWithNavController() e NavigationView.setupWithNavController() agora salvam e restauram automaticamente o estado dos destinos removidos, permitindo o suporte a várias backstacks sem mudanças no código. Ao usar a navegação com fragmentos, essa é a forma recomendada para integrar várias backstacks

As APIs de base para salvar e restaurar o estado são expostas por várias superfícies:

  • No XML de navegação, o elemento <action> agora pode usar os atributos booleanos de app:popUpToSaveState e app:restoreState para salvar o estado de quaisquer destinos removidos usando app:popUpTo e restaurar o estado associado ao destino transmitido como o app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Nas navOptions da DSL do Kotlin, é possível adicionar as propriedades booleanas restoreState e saveState no builder popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.findStartDestination().id) {
        saveState = true
      }
    }
    
  • Ao criar manualmente um objeto NavOptions usando o NavOptions.Builder, é possível usar setRestoreState() e a nova sobrecarga para setPopUpTo() que recebe um parâmetro saveState extra.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • As chamadas programáticas para popBackStack() agora podem incluir um parâmetro saveState extra.

  • Agora você pode usar o método clearBackStack() para limpar qualquer estado salvo com popBackStack() ou popUpToSaveState.

Em todos os casos, o NavController salva e restaura o estado de cada NavBackStackEntry, incluindo qualquer instância de destino ViewModel com escopo. As APIs Navigator foram atualizadas para permitir que cada Navigator aceite o salvamento e a restauração do próprio estado.

Mudanças de comportamento

  • O NavDeepLinkBuilder agora adiciona PendingIntent.FLAG_IMMUTABLE à PendingIntent retornada por createPendingIntent(), garantindo que essa API funcione conforme esperado quando destinada ao Android 12.
  • O Navigation agora depende do Lifecycle 2.3.1 e marca setGraph(), popBackStack(), navigateUp() e navigate() como os métodos que atualizam o Lifecycle da NavBackStackEntry, como @MainThread, alinhando o componente de navegação à aplicação da linha de execução principal introduzida no Lifecycle 2.3.0
  • Os links diretos agora verificam se todos os argumentos necessários (aqueles sem valores padrão) estão presentes no Uri.
  • Os argumentos analisados de NavDeepLink agora consideram símbolos de libra da mesma forma que os pontos de interrogação como separador entre segmentos de caminho, impedindo que um argumento se estenda pelo símbolo de libra.
  • Ao gerar ações, o código Kotlin criado pelo Safe Args agora coloca argumentos sem valores padrão antes daqueles com valores padrão como parâmetros
  • Ao gerar argumentos, o Safe Args agora coloca os parâmetros sem valores padrão antes daqueles com valores padrão
  • O Safe Args agora depende do Plug-in do Android para Gradle 4.2.0. Isso significa que você não vai receber mais o aviso sobre o uso do applicationIdTextResource.

Problemas conhecidos

  • Correção no Navigation 2.5.0-alpha01: o acesso a um ViewModel criado usando by navGraphViewModels() pelo método onCreate() de um fragmento falha com uma IllegalStateException (b/213504272).
  • Correção np Navigation 2.5.0-alpha01: o Safe Args 2.4.0 não oferece suporte ao Plug-in do Android para Gradle 7.1.0 e versões mais recentes (b/213086135).
  • Link direto com vários gráficos de navegação aninhados não criam corretamente a backstack completa (b/214383060).

Versão 2.4.0-rc01

15 de dezembro de 2021

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

Mudanças de comportamento

  • Os argumentos analisados de NavDeepLink agora consideram símbolos de libra da mesma forma que os pontos de interrogação como um separador entre argumentos (I21309, b/180042703).

Correções de bugs

  • Os links diretos não vão mais ignorar argumentos com valores iguais ao nome do marcador (If8017, b/207389470).
  • O NavController não falhará mais ao exibir um destino aninhado usando transições depois que o NavController for restaurado (I0f7c9, b/205021623).
  • A mensagem de erro ao usar um startDestination inválido passará a usar a rota de destino inicial, se disponível (I86b9d, b/208041894).

Correções de bugs do Navigation Compose

  • Correção da possível falha causada pela alternância rápida entre o destino inicial e outro destino usando os itens do menu de navegação inferior (Ic8976, b/208887901).
  • O destino da caixa de diálogo agora é restaurado corretamente na parte superior da tela após alterações de configuração ou encerramento de processo (I4c0dc, b/207386169).
  • Correção de um problema em que a tentativa de recuperar um ViewModel do NavBackStackEntry de uma caixa de diálogo falhava quando ela era dispensada (I6b96d, b/206465487).
  • Correção de um problema que resultava em recomposições infinitas ao usar destinos activity com o NavHost do Navigation Compose (I8f64c).
  • Correção de um vazamento no Navigation Compose em que ele se prendia a uma referência da atividade antiga após uma alteração de configuração ou encerramento de processo (I4efcb, b/204905432).

Correções de bugs do Safe Args

  • SafeArgs não falha mais ao tentar restaurar matrizes comparáveis personalizadas após a interrupção do processo (I618e8, b/207315994).
  • Correção de um bug em Safe Args que não permitia que matrizes booleanas tivessem um valor null (I8c396, b/174787525).

Versão 2.4.0-beta02

3 de novembro de 2021

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

Mudanças em APIs

  • Agora, o gerenciamento de links diretos explícitos e implícitos adiciona automaticamente a sinalização saveState ao navegar para outro gráfico, garantindo que esse código, como NavigationUI.setupWithNavController, e códigos que usam várias backstacks funcionam conforme o esperado (Ic8807).

Mudanças de comportamento

  • Os padrões de links diretos agora são compilados lentamente em NavDeepLink, em vez de durante a inflação. Isso melhora o tempo de inflação dos gráficos de navegação que incluem links diretos (b8d257, b/184149935).

Correções de bugs

  • Foi corrigido um problema em que NavBackStackEntries eram enviadas ao Lifecycle.State.CREATED depois de passar para o estado Lifecycle.State.STARTED quando o NavHost era adicionado diretamente ao método setContent() da atividade (Ia5ac1, b/203536683).
  • Uma disputa em que a saída de um destino DialogFragment da backstack antes da exibição da caixa de diálogo não dispensava a caixa de diálogo que resultava em uma falha quando a caixa de diálogo era dispensada manualmente pelo usuário foi corrigida (I687e5).
  • Corrigido um problema em que a API onNavDestinationSelected na NavigationUI retornava true mesmo que você não tivesse navigate() (navegado) para esse gráfico de navegação. Agora, a API usa a mesma lógica usada internamente pelo setupWithNavController para selecionar apenas o MenuItem associado ao destino atual usando a hierarchy do destino (I2b053).

Versão 2.4.0-beta01

27 de outubro de 2021

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

Novos recursos

  • Agora, é possível usar o by navGraphViewModel com uma rota como alternativa ao uso de um ID. Assim, você pode oferecer mais suporte ao uso da DSL de navegação do Kotlin com fragmentos (I901e3, b/201446416).

Mudanças na API

  • A API visibleEntries agora é experimental (I93f6f).

Correções de bugs

  • Os ViewModels não serão mais destruídos quando as transições forem interrompidas na navegação entre as mesmas telas (Id52d8, b/200817333).
  • Os argumentos NavDeepLink anuláveis não exigem mais um valor padrão ao adicionar links diretos para NavDestinations (I5aad4, b/201320030).
  • NavBackStackEntries com ciclos de vida diferentes não são mais consideradas iguais. Isso significa que o NavHost poderá recompor corretamente todos os destinos ao fazer a navegação usando singleTop e selecionar novamente os itens do menu de baixo (I1b351, b/196997433).
  • Corrigido um problema com o AbstractListDetailFragment que fazia com que os atributos layout_width e layout_weight no painel de listas retornado por onCreateListPaneView() fossem processados incorretamente ou ignorados (f5fbf3).
  • O estado visual dos destinos de caixas de diálogo agora está corretamente sincronizado com o estado do DialogFragmentNavigator. Isso significa que chamar manualmente a API dismiss() assíncrona para o DialogFragment agora limpa corretamente todos os destinos de caixas de diálogo acima da caixa de diálogo dispensada. Isso não afeta casos em que você usa popUpTo ou popBackStack() para dispensar a caixa de diálogo (I77ba2).
  • O AbstractAppBarOnDestinationChangedListener agora tem mensagens de erro mais claras para onDestinationChanged() (Ie742d).

Versão 2.4.0-alpha10

29 de setembro de 2021

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

Novos recursos

  • O NavController agora permite acessar uma lista de todas as instâncias NavBackStackEntry visíveis usando o StateFlow visibleEntries (Ia964e).
  • O método rememberNavController() agora usa um conjunto opcional de instâncias Navigator que vão ser adicionadas ao NavController retornado para oferecer melhor suporte a navegadores opcionais, como os do Material de navegação do Accompanist (I4619e).

Correções de bugs

  • A navegação dinâmica não falhará mais quando a atividade for recriada (Ifa6a3, b/197942869).
  • Corrigido um problema com o botão "Voltar" do sistema, que ocorre somente depois de retornar a um destino de composição que contém um NavHost (3ed148, b/195668143).
  • SafeArgs agora gera os argumentos para fromBundle() e fromSavedStateHandle() na ordem correta dos parâmetros (I824a8, b/200059831).

Versão 2.4.0-alpha09

15 de setembro de 2021

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

Novos recursos

  • Agora você pode usar o método clearBackStack() para limpar qualquer estado salvo com popBackStack() ou popUpToSaveState (I80a0f).
  • Agora você pode transmitir uma lista de argumentos e/ou links diretos para o builder do gráfico de navegação aninhado. Eles vão ser adicionados automaticamente ao gráfico resultante (I8a470, b/182545357).

Mudanças na API

  • A função navArgument do DSL do Kotlin agora faz parte de navigation-common em vez de navigation-compose. Para continuar usando essa função, você precisará atualizar as importações (I1d095).

Mudanças de comportamento

  • Ao gerar argumentos, o Safe Args agora coloca os parâmetros sem valores padrão antes daqueles com valores padrão (I89709, b/198493585).

Correções de bugs

  • Ao usar o Navigation Compose, o NavGraphs só será DESTROYED (destruído) depois que todos os filhos também tiverem sido DESTROYED (I86552, b/198741720).
  • Os argumentos NavDeepLink anuláveis não exigem mais um valor padrão (Ia14ef, b/198689811).
  • Chamar setGraph() com um novo gráfico agora também limpa todas as backstacks salvas, além do comportamento anterior de visualizar a backstack (I97f96).
  • Foi corrigido um problema em que instâncias de OnDestinationChangedListener e o currentBackStackEntryFlow não eram notificadas ao usar launchSingleTop (Iaaebc).

Atualizações de dependência

Versão 2.4.0-alpha08

1.º de setembro de 2021

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

Novos recursos

Mudanças de comportamento

  • Ao gerar ações, o código Kotlin criado pelo Safe Args agora coloca argumentos sem valores padrão antes daqueles com valores padrão como parâmetros (Idb697, b/188855904).
  • Os links diretos agora verificam se todos os argumentos necessários (aqueles sem valores padrão) estão presentes no Uri. (#204, em inglês, e b/185527157).

Correções de bugs

  • O uso de getBackStackEntry e previousBackStackEntry no método composable(), em conjunto com remember(), não vai causar mais uma exceção se não houver nenhum destino na backstack (I75138, b/194313238).
  • O Navigation Compose agora faz a recomposição corretamente ao mudar argumentos da backstack e usar launchSingleTop=true (Iebd69, b/186392337).
  • Uma ArrayIndexOutOfBoundsException não ocorrerá mais ao chamar o método setGraph usando um gráfico com 13 ou 29 destinos (I1a9f1, b/195171984).
  • O gerador Java do Safe Args não causará mais avisos de lint ao gerar classes Args (I1a666, b/185843837).

Contribuição externa

  • Agradecemos a ospixd (link em inglês) por garantir que os links diretos verifiquem se todos os argumentos necessários (aqueles sem valores padrão) estão presentes no Uri (#204, em inglês, e b/185527157).

Versão 2.4.0-alpha07

18 de agosto de 2021

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

Correções de bugs

  • O Navigation Compose agora salva corretamente o estado após mudanças na configuração e ao alterar gráficos usando o recurso de várias backstacks (If5a3d, b/195141957).
  • Selecionar novamente a mesma guia ao usar o Navigation Compose com várias backstacks não resultará mais em uma tela em branco (I860dc, b/194925622).
  • O NavHost agora observa mudanças no Lifecycle.State de NavBackStackEntrys, o que significa que um NavHost em um fragmento agora será recomposto corretamente à medida que o ciclo de vida muda, em vez de resultar em uma tela em branco (I4eb85, b/195864489).
  • Foi corrigido um problema em que a ação de dispensar um DialogFragment não atualizava corretamente o estado NavController depois de recriar a atividade, por exemplo, após uma mudança de configuração (Icd72b).
  • Foi corrigido um problema em que mostrar um destino de caixa de diálogo não atualizava o processamento do botão "Voltar" do sistema para o NavController, possivelmente fazendo com que o NavController interceptasse o botão, mesmo que ele não tivesse nenhuma backstack para mostrar (If3b34).
  • O Safe Args agora gera automaticamente um método toSavedStateHandle para argumentos que podem ser usados para testar seu código ViewModel (If1e2d, b/193353880).

Versão 2.4.0-alpha06

4 de agosto de 2021

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

Mudanças na API

  • Os métodos requireSlidingPaneLayout() e requireDetailPaneNavHostFragment() no AbstractListDetailFragment foram renomeados como getSlidingPaneLayout() e getDetailPaneNavHostFragment(), respectivamente (I34a08).

Mudanças de comportamento

  • Ao navegar com animações (como Crossfade), o Lifecycle do novo destino agora só alcança o estado RESUMED (retomado) quando a animação é concluída (If0543, b/172112072, b/194301889).
  • O NavHost do Navigation Compose agora define o gráfico como parte da primeira composição (Ieb7be).

Correções de bugs

  • Abrir o último destino de um gráfico de navegação não gera mais uma ClassCastException (If0543, b/172112072, b/194301889).
  • Corrigida uma NullPointerException que ocorria ao adicionar um link direto sem um Uri e navegar por uma rota ou link direto (938a0c, b/193805425).
  • Um problema no Navigation Compose, em que uma NavBackStackEntry de link direto não alcançava o estado RESUMED (retomado) foi corrigido (I192c5).
  • Foi corrigido um problema em que mostrar um destino de caixa de diálogo não atualizava o processamento do botão "Voltar" do NavController do sistema, possivelmente fazendo com que o NavController interceptasse o botão, mesmo que ele não tivesse nenhuma backstack para mostrar (aosp/1782668).

Versão 2.4.0-alpha05

21 de julho de 2021

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

Mudanças de comportamento

  • O NavHost do Navigation Compose agora sempre usa Crossfades ao navegar por destinos (I07049, b/172112072).
  • Agora é possível fazer mudanças no gráfico de um NavHost. Gráficos com o mesmo startDestination e destinos no gráfico vão ser considerados iguais e não apagarão o backstack de NavController (I0b8db, b/175392262).

Correções de bugs

  • Correção de uma NoSuchElementException ao chamar popBackStack() de dentro de um LifecycleObserver anexado a uma NavBackStackEntry causada por atualizações reentrantes ao estado do NavController (I64621).
  • O AbstractListDetailFragment agora permite que o SlidingPaneLayout seja completamente removido do seu APK quando o AbstractListDetailFragment não for usado (I611ad).
  • O NavGraph e o NavDestination agora substituem o método equals para que dois objetos com os mesmos valores sejam considerados iguais (I166eb, b/175392262).

Versão 2.4.0-alpha04

1º de julho de 2021

Lançamento de androidx.navigation:navigation-*:2.4.0-alpha04. A versão 2.4.0-alpha04 contém essas confirmações.

Novos recursos

  • O artefato navigation-fragment agora contém uma implementação pré-criada de um layout de dois painéis pelo novo AbstractListDetailFragment. Esse fragmento usa um SlidingPaneLayout para gerenciar um painel de lista (que a subclasse fornece) e um painel de detalhes, que usa um NavHostFragment como implementação, conforme mostrado no nosso exemplo de implementação (Iac4be, b/191276636).
  • O NavHost do artefato navigation-compose agora é compatível com destinos dialog, além de composable. Esses destinos de caixas de diálogo serão exibidos dentro de uma Dialog de composição, flutuando acima do destino composable atual (I011d0).
val navController = rememberNavController()
    Scaffold { innerPadding ->
        NavHost(navController, "home", Modifier.padding(innerPadding)) {
            composable("home") {
                // This content fills the area provided to the NavHost
                HomeScreen()
            }
            dialog("detail_dialog") {
                // This content will be automatically added to a Dialog() composable
                // and appear above the HomeScreen or other composable destinations
                DetailDialogContent()
            }
        }
    }

Mudanças na API

  • A função add em NavigatorState foi renomeada como push. Todas as chamadas atuais para add() precisarão ser mudadas para push() (Ie89fc, b/172112072).
  • As instâncias Navigator personalizadas agora podem usar as APIs pushWithTransaction e popWithTransition em NavigatorState para enviar ou inserir um destino de forma assíncrona. Observe que essas APIs ainda não são usadas por nenhum dos navegadores incluídos (Ic4d7c, b/172112072).

Mudanças de comportamento

  • O NavDeepLinkBuilder agora adiciona PendingIntent.FLAG_IMMUTABLE à PendingIntent retornada por createPendingIntent(), garantindo que essa API funcione conforme esperado quando destinada ao Android 12 (If8c52).

Correções de bugs

  • Correção de um problema com <include-dynamic> em que os argumentos passados para o gráfico não eram transmitidos corretamente para o gráfico incluído dinamicamente (I3e115).
  • Correção de uma NullPointerException ao navegar para um destino usando um argumento string[] com um valor padrão de @null (I1fbe8).
  • Adição de regras do ProGuard para @Navigator.Name, corrigindo problemas ao usar o modo completo R8 3.1 (I2add9, b/191654433).
  • O SafeArgs não falhará mais ao criar seu app com versões de Kotlin antes de 1.5.0 (Icd1ff, b/190739257).

Versão 2.4.0-alpha03

16 de junho de 2021

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

Correções de bugs

  • Correção de um problema em que duas chamadas navigate() eram necessárias para navegar até um gráfico dinâmico incluído (I7785c, b/188859835).
  • Foi corrigida uma regressão introduzida no Navigation 2.4.0-alpha01, em que setupActionBarWithNavController() não removia corretamente o ícone "Para cima" quando em um destino de nível superior (I5d443, b/189868637).
  • Correção de um IllegalStateException ao chamar popBackStack() após destacar anteriormente o gráfico raiz do NavController (I2a330, b/190265699).
  • As regras do ProGuard para by navArgs() agora são aplicadas corretamente ao usar navigation-common ou quaisquer artefatos que dependam dele (I68800, b/190082521).
  • Um OnDestinationChangedListener que chama navigate() na primeira vez que recebe um callback agora recebe corretamente um segundo callback com o destino para o qual ele navegou (Ie5f9e, b/190228815).
  • O Safe Args não falha mais ao ser usado com módulos de recursos dinâmicos e o AGP 7.0+ (I69518, b/189966576).

Problema conhecido

  • O Safe Args falhará com um erro Unable to find method ‘’java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)’’ ao usar o Gradle 6.7.0 devido a uma dependência em uma versão mais antiga do Kotlin. Para resolver isso, atualize para usar o Gradle 7.0 (b/190739257).

Versão 2.4.0-alpha02

2 de junho de 2021

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

Novos recursos

  • O Routes agora oferece suporte a destinos de atividade, fragmento e caixa de diálogo, assim como em toda a DSL DynamicNavigation do Kotlin (Ib5544, Ia617b, I22f96, b/188914648, b/188901565).
  • A NavigationUI adicionou temporariamente APIs experimentais para permitir a desativação da opção de salvar seu estado. Embora salvar o estado seja o comportamento correto, algumas bibliotecas descontinuadas sendo usadas (por exemplo, fragmentos retidos) não têm suporte para o salvamento do estado. Isso dá aos apps a oportunidade de fazer lentamente a conversão e deixar de usar APIs sem suporte (Idf93c).
  • A navegação agora fornece APIs findDestination() e getHierarchy() que podem ser usadas para ajudar a implementar a NavigationUI personalizada. A findDestination() é uma função de extensão no NavGraph que localizará um destino no gráfico. A getHierarchy() é uma função no NavDestination que pode ser usada para verificar se um determinado destino está na hierarquia de outro (I2932f, b/188183365).

    val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
    
  • Os métodos da NavigationUI que usavam um BottomNavigationView foram atualizados para usar a superclasse introduzida no Material 1.4.0, NavigationBarView. Isso permite que esses métodos sejam usados com NavigationRailView (Ib0b36, b/182938895).

  • Ao inflar um elemento <action> via XML, os atributos de animação podem usar atributos extraídos do tema usando a sintaxe app:enterAnim="?attr/transitionEnter" (I07bc1, b/178291654).

Mudanças na API

Correções de bugs

  • DialogFragmentNavigator agora usa a API NavigatorState.pop() para informar ao NavController quando uma caixa de diálogo é dispensada pressionando o botão "Voltar" do sistema ou clicando fora dela. Isso garante que o estado do NavController vai estar sempre sincronizado com o estado do Navigator (I2ead9).
  • A navegação não fornece mais uma ConcurrentModificationException ao usar a manipulação da lista de OnDestinationChangedListeners com um callback onDestinationChanged (Ib1707, b/188860458).

  • O Safe Args não apresenta mais falhas ao tentar gerar propriedades de direção no Kotlin (Id2416, b/188564435).

  • O método setId em NavDestination agora está devidamente anotado com @IdRes, então ele aceita apenas IDs de recursos (I69b80).

  • O parâmetro int de findNode agora é resId em vez de resid (I7711d).

Atualização de dependências

  • O Safe Args agora depende do Plug-in do Android para Gradle 4.2.0. Isso significa que você não vai receber mais o aviso sobre o uso do applicationIdTextResource (I6d67b, b/172824579).

Versão 2.4.0-alpha01

18 de maio de 2021

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

Novos recursos

  • O método currentBackStackEntryAsFlow() no NavController fornece um Flow que é emitido sempre que a NavBackStackEntry atual muda. Esse fluxo pode ser usado como uma alternativa ao gerenciamento manual de um OnDestinationChangedListener (I19c4a, #89, b/163947280).

Várias backstacks

O NavController é responsável por gerenciar a backstack dos destinos, adicionando destinos a ela quando o método navigate() navega até eles e os removendo ao chamar popBackStack() ou acionar o botão "Voltar" do sistema. A classe NavOptions existente e a integração com entradas <action> no XML dos gráficos de navegação foram expandidas para oferecer suporte ao salvamento e à restauração da backstack (b/80029773).

Como parte dessa mudança, os métodos NavigationUI de onNavDestinationSelected(), BottomNavigationView.setupWithNavController() e NavigationView.setupWithNavController() agora salvam e restauram automaticamente o estado dos destinos removidos, permitindo o suporte a várias backstacks sem mudanças no código. Ao usar a navegação com fragmentos, essa é a forma recomendada para integrar várias backstacks (Ie07ca).

As APIs de base para salvar e restaurar o estado são expostas por várias superfícies:

  • No XML de navegação, o elemento <action> agora pode usar os atributos booleanos de app:popUpToSaveState e app:restoreState para salvar o estado de quaisquer destinos removidos usando app:popUpTo e restaurar o estado associado ao destino transmitido como o app:destination:

    <action
      android:id=”@+id/swap_stack”
      app:destination=”@id/second_stack”
      app:restoreState=”true”
      app:popUpTo=”@id/first_stack_start_destination”
      app:popUpToSaveState=”true” />
    
  • Nas navOptions da DSL do Kotlin, é possível adicionar as propriedades booleanas restoreState e saveState no builder popUpTo:

    // Use the navigate() method that takes a navOptions DSL Builder
    navController.navigate(selectedBottomNavRoute) {
      launchSingleTop = true
      restoreState = true
      popUpTo(navController.graph.startDestinationId) {
        saveState = true
      }
    }
    
  • Ao criar manualmente um objeto NavOptions usando o NavOptions.Builder, é possível usar setRestoreState() e a nova sobrecarga para setPopUpTo() que recebe um parâmetro saveState extra.

    NavOptions navOptions = new NavOptions.Builder()
      .setLaunchSingleTop(true)
      .setRestoreState(true)
      .setPopUpTo(navController.getGraph().getStartDestinationId(),
        false, // inclusive
        true) // saveState
      .build();
    navController.navigate(selectedBottomNavId, null, navOptions);
    
  • As chamadas programáticas para popBackStack() agora podem incluir um parâmetro saveState extra.

Em todos os casos, o NavController salva e restaura o estado de cada NavBackStackEntry, incluindo qualquer instância de destino ViewModel com escopo. As APIs Navigator foram atualizadas para permitir que cada Navigator aceite o salvamento e a restauração do próprio estado.

O ComposeNavigator usado para destinos composable no Navigation Compose e os FragmentNavigator e DynamicFragmentNavigator usados para destinos <fragment> no Navigation com fragmentos foram atualizados para usar as novas APIs Navigator e oferecer suporte ao salvamento e à restauração do estado.

Rotas de navegação

Uma rota é uma String que identifica um destino exclusivamente. Embora fosse usado anteriormente apenas no Navigation Compose, esse conceito passou a ser parte das principais APIs Navigation. Isso fornece uma alternativa ao uso de IDs de números inteiros ao criar seu gráfico usando a DSL de navegação do Kotlin (b/172823546).

Todas as APIs que recebiam apenas um ID agora têm uma sobrecarga que usa uma String de rota. Isso inclui navigate(), popBackStack(), popUpTo() e getBackStackEntry().

Isso teve algumas implicações na API:

  • A propriedade popUpTo na DSL do Kotlin foi descontinuada e substituída por popUpToId (I59c73, b/172823546).
  • A API getStartDestination() foi descontinuada e substituída por getStartDestinationId() (I0887f, b/172823546).

Para desenvolvedores que fizeram upgrade de versões anteriores do Navigation Compose para o Navigation Compose 2.4.0-alpha01, isso significa que as importações de métodos de extensão a seguir não são mais necessárias e precisam ser removidas:

import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo

O argumento KEY_ROUTE foi substituído pela propriedade route em NavDestination, permitindo que você chame navBackStackEntry.destination.route diretamente.

Mudanças na API

  • Todos os artefatos de navegação foram reescritos em Kotlin. Isso melhorou a nulidade de classes usando a generalização (como subclasses NavType). Todas as funções de extensão do Kotlin que costumavam fazer parte dos artefatos -ktx foram movidas para os respectivos artefatos principais. Os artefatos -ktx vão continuar sendo publicados, mas estão completamente vazios (b/184292145).
  • Agora, o NavDeepLinkBuilder é compatível com a adição de vários destinos distintos à backstack gerada (I3ee0d, b/147913689).
  • Funções de fábrica para DynamicNavHostFragment foram adicionadas (Icd515, b/175222619).
  • O ID exclusivo de uma NavBackStackEntry agora é exposto como parte da API pública dela (Ie033a).
  • Os campos name e argument e as funções de desestruturação de NamedNavArgument agora são públicos (#174 (link em inglês), b/181320559).
  • Uma nova extensão NavBackStackEntry#provideToCompositionLocals que fornece o NavBackStackEntry para os locais de composição relevantes foi adicionada (#175 (link em inglês), b/187229439).

Safe Args

  • O Safe Args agora gera um método fromSavedStateHandle() para cada classe NavArgs (#122 (link em inglês), b/136967621).

    class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {
      // Create a HomeDestinationArgs class with type safe accessors for each argument
      // defined on your destination
      private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle)
    }
    
  • O Safe Args foi atualizado para usar o KotlinPoet 1.8.0 (#172 (link em inglês), b/183990444).

Mudanças de comportamento

  • O Navigation agora depende do Lifecycle 2.3.1 e marca setGraph(), popBackStack(), navigateUp() e navigate() como os métodos que atualizam o Lifecycle da NavBackStackEntry, como @MainThread, alinhando o componente de navegação à aplicação da linha de execução principal introduzida no Lifecycle 2.3.0 (b/171125856).
  • A análise de argumentos de enumeração de links diretos agora é indiferente a maiúsculas. Isso permite que um link direto, como http://www.example.com/red, corresponda a um link direto www.example.com/{color} mesmo quando a enumeração tiver o valor RED (#152 (link em inglês), b/135857840).

Compatibilidade do Compose

  • androidx.navigation:navigation-compose:2.4.0-alpha01 só é compatível com a versão 1.0.0-beta07 do Compose e mais recentes.

Correções de bugs

  • Correção de um problema em que marcadores de argumentos à direita tinham prioridade sobre links diretos que tinham um sufixo exato correspondente (#153 (link em inglês), b/184072811).
  • NavHostFragment agora oferece suporte a navegadores personalizados que usam o mesmo @Navigator.Name("dialog") do DialogFragmentNavigator padrão (Ib1c2c, b/175979140).
  • Melhoria no comportamento de NavigatorProvider#addNavigator para garantir que chamá-lo repetidamente com a mesma instância não cause problemas (#176 (link em inglês), b/187443146).

Contribuições externas

  • Agradecemos a simonschiller (em inglês) pela criação do suporte ao Safe Args, gerando um método fromSavedStateHandle() para cada classe NavArgs (#122 (link em inglês), b/136967621).
  • Agradecemos a Bradleycorn (em inglês) por tornar a análise de argumentos de tipo enumerado de links diretos indiferente a maiúsculas (#152 (link em inglês), b/135857840).
  • Agradecemos a osipxd (link em inglês) por corrigir um problema em que os marcadores de argumentos à direita tinham precedência sobre links diretos com um sufixo exato correspondente (#153 (link em inglês), b/184072811).
  • Agradecemos a tatocaster (link em inglês) por atualizar o Safe Args para depender do KotlinPoet 1.8.0 (#172 (link em inglês), b/183990444).
  • Agradecemos a jossiwolf (em inglês) por tornar os campos name e argument e as funções de desestruturação do NamedNavArgument públicos (#174 (link em inglês), b/181320559).
  • Agradecemos a jossiwolf (link em inglês) por apresentar uma nova extensão NavBackStackEntry#provideToCompositionLocals que fornece a NavBackStackEntry aos locais de composição relevantes (#175 (link em inglês), b/187229439).
  • Agradecemos a jossiwolf (em inglês) por melhorar o comportamento do NavigatorProvider#addNavigator, garantindo que chamá-lo repetidamente com a mesma instância não cause problemas (#176 (link em inglês), b/187443146).

Versão 1.0.0-alpha10

7 de abril de 2021

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha10. A versão 1.0.0-alpha10 contém estas confirmações.

Mudanças na API

  • NavHost agora aceita um Modifier, que é transmitido para o contêiner combinável que encapsula os elementos combináveis de destino (I85aca, b/175125483).

Correções de bugs

  • NavHost agora funciona mesmo quando um OnBackPressedDispatcherOwner não é encontrado, por exemplo, ao visualizar o NavHost (I7d8b4).
  • O Navigation Compose agora depende do Navigation 2.3.5, corrigindo um problema ao usar BackHandler dentro de um destino NavHost (I7e63b, b/182284739).

Versão 1.0.0-alpha09

10 de Março de 2021

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha09. A versão 1.0.0-alpha09 contém estas confirmações.

Mudanças na API

  • LocalViewModelStoreOwner.current agora retorna um ViewModelStoreOwner anulável para determinar melhor se um ViewModelStoreOwner está disponível na composição atual. As APIs que exigem um ViewModelStoreOwner, como viewModel() e NavHost, ainda geram uma exceção se um ViewModelStoreOwner não está definido (Idf39a).

Correções de bugs

  • O Navigation Compose agora depende do Navigation 2.3.4, que inclui a correção para tentar definir o mesmo objeto do ViewModelStore depois que o gráfico foi definido (I65c24, b/177825470).

Versão 1.0.0-alpha08

24 de fevereiro de 2021

Lançamento do androidx.navigation:navigation-compose:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Novos recursos

  • NavHost agora preenche o CompositionLocal do LocalSavedStateRegistryOwner com a NavBackStackEntry desse destino, garantindo que todos os estados salvos diretamente no SavedStateRegistry serão salvos e restaurados com o destino (I435d7, b/179469431).

Versão 1.0.0-alpha07

10 de fevereiro de 2021

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Atualizações de dependência

Versão 1.0.0-alpha06

28 de janeiro de 2021

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Mudanças na API

  • Adição de um método de extensão getBackStackEntry(route: String) em NavController que retorna a NavBackStackEntry associada (If8931).

Versão 1.0.0-alpha05

13 de janeiro de 2021

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Atualizada para depender do Compose 1.0.0-alpha10.

Versão 1.0.0-alpha04

16 de dezembro de 2020

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

  • Atualizada para compatibilidade com o Compose 1.0.0-alpha09.

Versão 1.0.0-alpha03

2 de dezembro de 2020

Lançamento de androidx.navigation:navigation-compose:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que popBackStack() e navigateUp() não funcionavam após uma mudança de configuração ou da interrupção e recriação de um processo (Icea47, b/173281473).
  • A navegação até um gráfico aninhado no NavHost agora funciona corretamente (I0948d, b/173647694).

Versão 1.0.0-alpha02

11 de novembro de 2020

androidx.navigation:navigation-compose:1.0.0-alpha02 é lançado. A versão 1.0.0-alpha02 contém estas confirmações.

Mudanças na API

  • O Navigation Compose agora oferece suporte ao NavOptions para uso de operações popUpTo e launchSingleTop (If96c3, b/171468994).
  • Adição de uma função de navegação que usa uma rota em vez de um ID, permitindo construir gráficos aninhados na DSL do Navegation Compose (I1661d).
  • startDestination agora vem antes da rota na lista de parâmetros para um NavHost (Ie620e).
  • Agora, você pode criar um gráfico usando a rota como um destino inicial fora de um elemento combinável do NavHost (Iceb75).

Versão 1.0.0-alpha01

28 de outubro de 2020

android.navigation:navigation-compose:1.0.0-alpha01 é lançado. A versão 1.0.0-alpha01 contém estas confirmações.

Novos recursos

O artefato navigation-compose fornece integração entre o componente de navegação e o Jetpack Compose. Ele usa funções @Composable como destinos no aplicativo.

Esta versão inicial oferece:

  • Um elemento NavHost combinável que permite construir seu gráfico de navegação por uma DSL do Kotlin.
  • Escopo do ciclo de vida, ViewModel, e estado memorizado no nível de destino.
  • Integração automática com o botão "Voltar" do sistema.
  • Suporte à transmissão de argumentos, anexação de links diretos para destinos e retorno de um resultado para destinos anteriores.
  • Auxiliares específicos do Compose em rememberNavController() e currentBackStackEntryAsState() para permitir a elevação do estado e conectar NavController a elementos combináveis fora do NavHost, como uma barra de navegação inferior.

Consulte o guia de navegação do Compose para ver mais informações.

Versão 2.3.5

Versão 2.3.5

7 de abril de 2021

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

Novos recursos

  • Ao navegar usando um NavDeepLinkRequest ou Uri, agora é possível acessar o Uri, a ação e o tipo MIME no destino resultante, conseguindo a intent dos argumentos pela KEY_DEEP_LINK_INTENT, espelhando a funcionalidade já disponível para links diretos externos (I975c3, b/181521877).

Correções de bugs

  • OnBackPressedCallbacks foi adicionado a um agente com a NavBackStackEntry agora que o LifecycleOwner intercepta pressionamentos para voltar de forma correta após o ciclo de vida da atividade ser STOPPED e depois STARTED (Iff94f, b/182284739).
  • Agora, a análise de domínio de link direto não diferencia maiúsculas de minúsculas, garantindo que www.example.com corresponda a www.example.com e www.Example.com. Os nomes dos parâmetros de consulta ainda diferenciam maiúsculas de minúsculas (#144, b/153829033).
  • Correção de uma NullPointerException que podia ocorrer quando um destino tem vários argumentos padrão não anuláveis e você navega até esse destino modificando apenas um subconjunto desses argumentos (aosp/1644827).

Atualizações de dependência

  • O plug-in do Gradle do Navigation Safe Args agora depende do plug-in do Gradle do Kotlin 1.4.31 (aosp/1661058, b/181156413).

Contribuição externa

  • Agradecemos a bentrengrove (em inglês) pela solicitação de envio que tornou a análise de domínios de link direto indiferente a maiúsculas (#144, b/153829033).

Versão 2.3.4

Versão 2.3.4

10 de Março de 2021

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

Novos recursos

  • Os argumentos ReferenceType agora podem ser analisados corretamente quando enviados como parte de um URI de link direto. Eles oferecem suporte ao valor inteiro bruto e aos valores hexadecimais prefixados por 0x (#127 em inglês, b/179166693).
  • O android:defaultValue para um argumento com app:argType="float" agora oferece suporte a valores padrão inteiros, permitindo que você use android:defaultValue="0" em vez de exigir o uso de 0.0 (#117 em inglês, b/173766247).

Correções de bugs

  • Foi corrigido o travamento do progresso de instalação ao usar a compatibilidade do Navigation para recursos dinâmicos (Ib27a7, b/169636207).
  • Chamar setViewModelStore ou setLifecycleOwner com o mesmo objeto que já foi definido resulta em um ambiente autônomo (Idf491, b/177825470).
  • O Safe-Args agora adiciona anotações de supressão nos métodos adequados ao usar Java (I8fbc5, b/179463137).

Contribuições externas

  • Agradecemos a JvmName (link em inglês) pela solicitação de envio para garantir que os argumentos ReferenceType agora possam ser analisados corretamente quando enviados como parte de um URI de link direto (#127 em inglês, b/179166693).
  • Agradecemos a tatocaster (em inglês) pela solicitação de envio para permitir o suporte a valores padrão para o defaultValue de um argumento com app:argType=”float” (#117 em inglês, b/173766247).

Versão 2.3.3

Versão 2.3.3

27 de janeiro de 2021

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

Correções de bugs

  • Não há mais uma falha ao exibir uma NavBackStackEntry antes que o Lifecycle dela seja mudado para CREATED (Ie3ba3).
  • Correção da regressão causada por b/171364502, em que a navegação para uma atividade com um valor de recurso de animação de 0 causava uma ResourceNotFoundException (I7aedb, b/176819931).

Versão 2.3.2

Versão 2.3.2

2 de dezembro de 2020

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

Correções de bugs

  • Correção de uma regressão na NavigationUI, em que o uso de um destino <activity> com onNavDestinationSelected falhava ao navegar para a Activity (I22e34, b/171364502).
  • Correção de um problema em que o navigation-dynamic-features-fragment resultava na navegação para o destino recém-instalado várias vezes (aosp/1486056, b/169636207).
  • Correção de um problema em que os argumentos padrão não eram enviados para instâncias de OnDestinationChangedListener ao usar launchSingleTop (I2c5cb).
  • Correção de um problema em que a navegação para um gráfico de navegação aninhado não criava uma nova instância de gráfico na pilha de retorno (Ifc831).
  • Correção de um problema em que o uso de navigate() com um popUpTo que removia o último destino em um gráfico de navegação não destruiria nem removeria imediatamente o gráfico de navegação da backstack (I910a3).
  • O SafeArgs do Navigation agora usa o KotlinPoet versão 1.7.2, que adiciona suporte ao modo explícito de API do Kotlin (I918b5).
  • O NavHostFragment.findNavController(Fragment) agora também verifica a visualização de decoração raiz de um DialogFragment, além das verificações existentes da hierarquia do Fragment e da hierarquia de visualização do Fragment. Isso permite que você teste fragmentos de caixas de diálogo que usam o Navigation com FragmentScenario e Navigation.setViewNavController() (I69e0d).

Versão 2.3.1

Versão 2.3.1

14 de outubro de 2020

androidx.navigation:navigation-*:2.3.1 é lançado. A versão 2.3.1 contém estas confirmações.

Novos recursos

  • Recursos padrão do Animator foram adicionados à IU do Navigation e são recomendados no lugar dos recursos de animação padrão (b/167430145).
  • Agora, NavOptions substitui o hashcode e os métodos equals (b/161586466).
  • Agora, o Navigation inclui o destino atual na IllegalArgumentException "Não há destinos com o ID", o que deve melhorar a experiência de depuração do desenvolvedor (b/168311416).

Correções de bugs

  • O Safe Args não une mais a linha de retorno, mesmo se o nome da classe do argumento gerado tiver mais de 100 caracteres (b/168584987).

Mudanças na dependência

  • navigation-ui agora depende do DrawerLayout 1.1.1, garantindo que a NavigationUI é capaz de abrir a gaveta mesmo quando usar LOCK_MODE_LOCKED_CLOSED ou LOCK_MODE_LOCKED_OPEN (b/162253907).
  • O Safe Args agora depende do KotlinPoet 1.6.0. (aosp/1435911).
  • O Safe Args agora depende do AGP 4.0.1 (aosp/1442337).

Versão 2.3.0

Versão 2.3.0

24 de junho de 2020

androidx.navigation:navigation-*:2.3.0 é lançado. A versão 2.3.0 contém estas confirmações.

Principais mudanças desde a versão 2.2.0

  • Integração do módulo de recursos: os artefatos navigation-dynamic-features-runtime e navigation-dynamic-features-fragment permitem navegar para destinos definidos em módulos de recursos, gerenciando automaticamente a instalação conforme necessário. Consulte Navegar com módulos de recursos para ver mais informações.
  • Testes de navegação: o artefato navigation-testing fornece um TestNavHostController que permite definir o destino atual e verificar o backstack após as operações de navegação. Consulte Testar a navegação para ver mais informações.
  • Retornar um resultado: o NavBackStackEntry associado a cada destino no backstack do Navigation agora permite que você acesse um SavedStateHandle adequado para armazenar pequenas quantidades de estado salvo que precisa ser associado a uma entrada específica do backstack. Consulte Retornar um resultado ao destino anterior para ver mais informações.
  • Suporte de NavigationUI a Openable: todos os usos de DrawerLayout em NavigationUI foram substituídos pela interface Openable mais genérica adicionada em CustomView 1.1.0 e implementada por DrawerLayout em DrawerLayout 1.1.0.
  • Suporte à ação e ao Tipo MIME em links diretos: houve a expansão dos links diretos para oferecer suporte a app:action e app:mimeType, além do app:uri disponível anteriormente. NavController agora oferece suporte à navegação por qualquer combinação desses campos graças à nova classe NavDeepLinkRequest. Consulte Navegar usando NavDgleLinkRequest para ver mais informações.

Problemas conhecidos

  • O suporte a ações de link direto e tipos MIME ainda não está disponível no Manifest Merger. Até que esse trabalho seja concluído, os elementos <intent-filter> gerados a partir do elemento <nav-graph> no manifesto não vão incluir o tipo MIME no elemento <data> ou na sua <action> personalizada. Adicione manualmente ao manifesto um <intent-filter> apropriado.

Versão 2.3.0-rc01

10 de junho de 2020

androidx.navigation:navigation-*:2.3.0-rc01 é lançado. A versão 2.3.0-rc01 contém estas confirmações.

Correções de bugs

  • Foi corrigido um NullPointerException ao substituir uma instância de um destino sem argumentos por outra instância com argumentos com singleTop (b/158006669).
  • Todas as exceções destination is unknown geradas por NavController agora têm mais informações de depuração para ajudar a determinar o estado do NavController (b/157764916)

Versão 2.3.0-beta01

20 de maio de 2020

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

Correções de bugs

  • Foi corrigido um problema em que o Lifecycle do NavBackStackEntry não era atualizado corretamente após a interrupção do processo (b/155218371).
  • As instâncias OnDestinationChangedListener registradas antes de chamar setGraph() agora recebem o destino restaurado corretamente após a interrupção do processo (b/155218371).
  • Ao usar singleTop, o NavBackStackEntry agora tem os argumentos atualizados corretamente e enviados para todas as instâncias de OnDestinationChangeListener (b/156545508).

Atualizações de dependência

Versão 2.3.0-alpha06

29 de abril de 2020

androidx.navigation:navigation-*:2.3.0-alpha06 é lançado. A versão 2.3.0-alpha06 contém estas confirmações.

Novos recursos

  • Os links diretos foram expandidos para serem compatíveis com app:action e app:mimeType, além do app:uri disponível anteriormente. O NavController agora oferece suporte a navegação por qualquer combinação desses campos pela nova classe NavDeepLinkRequest (b/136573074, b/135334841).

Mudanças na API

  • Ampliamos o suporte a DSL do Kotlin para destinos Dynamic Navigation (b/148969800)

Correções de bugs

  • Foi corrigido um problema em que as intents de link direto eram ignoradas ao usar um destino inicial aninhado (b/154532067).

Versão 2.3.0-alpha05

15 de abril de 2020

androidx.navigation:navigation-*:2.3.0-alpha05 é lançado. A versão 2.3.0-alpha05 contém estas confirmações.

Novos recursos

  • Para gráficos dinâmicos incluídos usando <include-dynamic>, você não precisa mais especificar app:graphPackage, e um padrão vai ser usado adicionando o sufixo moduleName ao applicationId após um ponto. Se você precisa personalizar seu graphPackage, agora há suporte a um marcador ${applicationId} (b/152696768).
  • Agora, a DSL Kotlin de Navigation Graph expõe um Map defaultArguments para ações, espelhando a capacidade de definir valores padrão em elementos <action> em arquivos XML de Navigation (b/150345605, link em inglês)

Correções de bugs

  • No Navigation 2.2.2: correção de uma IllegalStateException quando há links diretos para o destino inicial do seu gráfico com várias instâncias NavHostFragment na sua Activity (b/147378752, link em inglês)

Atualizações de dependência

Versão 2.3.0-alpha04

18 de março de 2020

androidx.navigation:navigation-*:2.3.0-alpha04 é lançado. A versão 2.3.0-alpha04 contém estas confirmações.

Novos recursos

  • Foi adicionado suporte a atividades de módulo de recursos e destinos de fragmento na DSL Kotlin de navegação (b/148969800)

Mudanças na API

  • Agora, a classe DynamicExtras não usa mais um padrão de construtor e pode ser construída diretamente (aosp/1253671).
  • DynamicActivityNavigator agora usa um Context no construtor em vez de uma Activity (aosp/1250252).

Correções de bugs

  • NavigationUI não ignora mais rótulos vazios (ou seja, um destino com android:label=””) e agora define corretamente o título como uma string vazia (b/148679860).

Atualizações de dependência

  • Os artefatos Navigation Dynamic Features agora dependem do Play Core 1.6.5 (b/149556401).

Versão 2.3.0-alpha03

4 de março de 2020

androidx.navigation:navigation-*:2.3.0-alpha03 é lançado. A versão 2.3.0-alpha03 contém estas confirmações.

Mudanças na API

  • Em vez de confiar na classe concreta DrawerLayout, AppBarConfiguration agora usa a interface Openable introduzida em CustomView 1.1.0-alpha02, que DrawerLayout implementa usando o DrawerLayout 1.1.0-alpha04, permitindo que você use implementações personalizadas de Openable com NavigationUI (b/129030452).

Correções de bugs

  • As regras navigation-common-ktx do ProGuard agora mantêm corretamente apenas as classes NavArgs que são usadas, em vez de todas as instâncias NavArgs (b/150213558).

Mudanças na dependência

  • O Navigation reverteu a dependência no Core 1.2.0 e agora depende do Core 1.1.0 para evitar forçar que os desenvolvedores migrem para uma dependência mais recente quando o Navigation não depender de novas APIs no Core 1.2.0.

Versão 2.3.0-alpha02

19 de fevereiro de 2020

androidx.navigation:navigation-*:2.3.0-alpha02 é lançado. A versão 2.3.0-alpha02 contém estas confirmações.

Novos recursos

  • NavBackStackEntry agora permite que você acesse um SavedStateHandle adequado para armazenar pequenas quantidades de estados salvos que precisam ser associados a uma entrada de pilha de retorno específica. Consulte Como retornar um resultado para ver um exemplo de caso de uso. (b/79672220).

Mudanças na API

  • Os métodos de conveniência de getCurrentBackStackEntry() e getPreviousBackStackEntry() foram adicionados para facilitar a recuperação de um NavBackStackEntry para os destinos atuais e anteriores (b/79672220).

Correções de bugs

  • navigateUp() agora transmite os argumentos do destino atual e KEY_DEEP_LINK_INTENT para o destino anterior ao iniciar o app na sua pilha de tarefas (b/147456890).

Mudanças na dependência

Versão 2.3.0-alpha01

5 de fevereiro de 2020

androidx.navigation:navigation-*:2.3.0-alpha01 é lançado. A versão 2.3.0-alpha01 contém estas confirmações.

Novos recursos

  • O novo artefato navigation-testing fornece uma classe TestNavHostController. Essa classe oferece uma alternativa ao uso de um NavController simulado ao testar o Navigation, o que permite definir o destino atual e verificar a backstack após as operações de navegação (b/140884273).
  • O novo navigation-dynamic-features-fragment (e a dependência transitiva dele, navigation-dynamic-features-runtime) permite que você inclua destinos ou gráficos de navegação inteiros (via <include-dynamic>) de módulos de recursos, oferecendo uma instalação simples de módulos de recursos on demand ao navegar para esses destinos. Consulte Navegar com módulos de recursos para ver mais informações. (b/132170186)

Correções de bugs

  • No Navigation 2.2.1: links diretos sem parâmetros de consulta agora ignoram corretamente todos os parâmetros de consulta em vez de os anexar a elementos {argument} no início ou no fim ou a elementos sem correspondência com o link direto (b/147447512).
  • No Navigation 2.2.1: as regras do ProGuard navigation-ui para DrawerArrowDrawable foram atualizadas para garantir que android.enableJetifier=true não seja obrigatório (b/147610424).
  • No Navigation 2.2.1: o módulo navigation-common-ktx agora tem um nome de pacote de manifesto exclusivo em vez do mesmo nome de pacote de manifesto que navigation-runtime-ktx (aosp/1141947).

Atualizações de dependência

Versão 2.2.2

Versão 2.2.2

15 de abril de 2020

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

Correções de bugs

  • Correção de IllegalStateException quando há links diretos para o destino inicial do seu gráfico com várias instâncias NavHostFragment na sua Activity (b/147378752).
  • NavigationUI não ignora mais rótulos vazios (ou seja, um destino com android:label=””) e agora define corretamente o título como uma string vazia Isso foi lançado anteriormente no Navigation 2.3.0-alpha04 (b/148679860).
  • As regras navigation-common-ktx do ProGuard agora mantêm corretamente apenas as classes NavArgs que são usadas, em vez de todas as instâncias NavArgs. Isso foi lançado anteriormente no Navigation 2.3.0-alpha03 (b/150213558, link em inglês)

Atualizações de dependência

Versão 2.2.1

Versão 2.2.1

5 de fevereiro de 2020

androidx.navigation:navigation-*:2.2.1 é lançado. A versão 2.2.1 contém estas confirmações.

Correções de bugs

  • Agora, os links diretos sem parâmetros de consulta ignoram corretamente todos os parâmetros de consulta em vez de os anexar a elementos {argument} no início ou no fim ou elementos sem correspondência com o link direto (b/147447512).
  • As regras do ProGuard navigation-ui para DrawerArrowDrawable foram atualizadas para garantir que o uso de android.enableJetifier=true não seja obrigatório (b/147610424).
  • O módulo navigation-common-ktx agora tem um nome de pacote de manifesto exclusivo em vez de compartilhar o mesmo nome de pacote de manifesto que navigation-runtime-ktx (aosp/1141947).

Atualizações de dependência

Versão 2.2.0

Versão 2.2.0

22 de janeiro de 2020

androidx.navigation:navigation-*:2.2.0 é lançado. A versão 2.2.0 contém estas confirmações.

Mudanças importantes desde a versão 2.1.0

  • NavBackStackEntry: agora você pode chamar NavController.getBackStackEntry(), passando o ID de um destino ou gráfico de navegação na pilha de retorno. O NavBackStackEntry retornado fornece um LifecycleOwner acionado pela navegação, ViewModelStoreOwner (o mesmo retornado por NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner, além de fornecer os argumentos usados para iniciar o destino.
  • Integração do Lifecycle ViewModel SavedState: SavedStateViewModelFactory agora é a fábrica padrão empregada ao usar by navGraphViewModels() ou o construtor ViewModelProvider com um ViewModelStoreOwner retornado por NavController.getBackStackEntry() ou NavController.getViewModelStoreOwner().
  • Suporte a links diretos com parâmetros de consulta: links diretos com parâmetros de consulta agora oferecem suporte aos parâmetros de consulta reordenados. Argumentos que têm um valor padrão ou são anuláveis agora são opcionais na correspondência de links diretos.
  • Melhoria no suporte a animação: NavHostFragment agora usa FragmentContainerView do Fragment 1.2.0, corrigindo problemas relacionados à ordem z de animações e a inserções de janelas enviadas para o Android Fragments.

Versão 2.2.0-rc04

18 de dezembro de 2019

androidx.navigation:navigation-*:2.2.0-rc04 é lançado. A versão 2.2.0-rc04 contém estas confirmações.

Correções de bugs

  • Ajuste das animações de esmaecimento padrão usadas por navigation-ui para corresponder às animações de esmaecimento ajustadas no Fragment 1.2.0-rc04 (b/145769814).

Versão 2.2.0-rc03

4 de dezembro de 2019

androidx.navigation:navigation-*:2.2.0-rc03 é lançado. A versão 2.2.0-rc03 contém estas confirmações.

Correções de bugs

  • Foi corrigido um problema na análise de links diretos ao usar parâmetros de consulta e um argumento como a última parte do caminho, o que impedia que mais de um caractere do argumento de caminho final fosse analisado (b/144554689).
  • Correção de um problema na análise de links diretos em que parâmetros opcionais recebem "@null" em vez de null (b/141613546).
  • NavHostFragment agora restaura corretamente o gráfico após uma mudança de configuração quando usado com FragmentContainerView (b/143752103).

Mudanças na dependência

  • A navegação agora depende do Lifecycle 2.2.0-rc03, do Lifecycle ViewModel SavedState 1.0.0-rc03, da Activity 1.1.0-rc03 e do Fragment 1.2.0-rc03 quando apropriado.

Versão 2.2.0-rc02

7 de novembro de 2019

androidx.navigation:navigation-*:2.2.0-rc02 é lançado. A versão 2.2.0-rc02 contém estas confirmações.

Mudanças na dependência

  • A navegação agora depende do androidx.lifecycle 2.2.0-rc02.

Versão 2.2.0-rc01

23 de outubro de 2019

androidx.navigation:navigation-*:2.2.0-rc01 é lançado sem mudanças desde 2.2.0-beta01. A versão 2.2.0-rc01 contém estas confirmações.

Versão 2.2.0-beta01

9 de outubro de 2019

androidx.navigation:navigation-*:2.2.0-beta01 é lançado. A versão 2.2.0-beta01 contém estas confirmações.

Novos recursos

  • NavDestination e as subclasses dele agora substituem toString() para fornecer informações mais úteis durante a depuração (b/141264986).

Mudanças de comportamento

  • Parâmetros de consulta extra agora são ignorados ao fazer a correspondência com links diretos, em vez de fazer com que a correspondência falhe (b/141482822).

Correções de bugs

  • Correção de um problema em que os argumentos no caminho de um link direto seriam ignorados se os parâmetros de consulta também fossem especificados (b/141505755).
  • A extensão Kotlin navArgs() em Activity agora tem uma mensagem de erro melhor quando não há extras (b/141408999).
  • As classes Java Directions geradas pelo Safe Args agora contêm valores padrão (b/141099045).
  • As classes Java Args geradas pelo Safe Args agora contêm valores padrão (b/140123727).
  • Ao usar um Toolbar, NavigationUI não anima mais a alteração do texto ao se mover entre dois destinos de nível superior (b/140848160).

Versão 2.2.0-alpha03

18 de setembro de 2019

androidx.navigation:navigation-*:2.2.0-alpha03 é lançado. A versão 2.2.0-alpha03 contém estas confirmações.

Mudanças de comportamento

  • Chamar setViewModelStore() depois de chamar setGraph agora resulta em um IllegalStateException. Isso sempre tem que ser definido pelo NavHost como parte da configuração inicial para garantir que todas as instâncias de NavBackStackEntry tenham um armazenamento consistente para instâncias de ViewModel (aosp/1111821).

Correções de bugs

  • Correção de uma ConcurrentModificationException ao usar instâncias de ViewModel anexadas a várias instâncias de ViewModelStore com escopo no gráfico de navegação (aosp/1112257).

Versão 2.2.0-alpha02

5 de setembro de 2019

Lançamento de androidx.navigation:navigation-*:2.2.0-alpha02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Agora, os links diretos com parâmetros de consulta são compatíveis com os parâmetros de consulta reordenados. Argumentos que têm um valor padrão ou são anuláveis agora são opcionais na correspondência de links diretos (b/133273839).
  • Agora você pode chamar NavController.getBackStackEntry(), passando o código de um destino ou gráfico de navegação na pilha de retorno. A NavBackStackEntry retornada fornece um LifecycleOwner acionado pelo Navigation, ViewModelStoreOwner (o mesmo retornado por NavController.getViewModelStoreOwner()) e SavedStateRegistryOwner, além de fornecer os argumentos usados para iniciar o destino (aosp/1101691, aosp/1101710)

Correções de bugs

  • Correção de um problema no qual a adição de NavHostFragment a ViewPager2 falhou com um IllegalArgumentException (b/133640271).
  • NavInflater agora evita chamar getResourceName() desnecessariamente, acelerando o tempo de inflação em até 40% (b/139213740).

Versão 2.2.0-alpha01

7 de agosto de 2019

androidx.navigation:navigation-*:2.2.0-alpha01 é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • SavedStateViewModelFactory agora é padrão de fábrica para o uso de by navGraphViewModels() ou do construtor ViewModelProvider com um ViewModelStoreOwner retornado por NavController.getViewModelStoreOwner() (b/135716331).

Mudanças na API

Correções de bugs

  • NavHostFragment agora usa FragmentContainerView, corrigindo problemas relacionados à ordem z de animações e a inserções de janelas enviadas para o Android Fragments (b/137310379).

Versão 2.1.0

Versão 2.1.0

5 de setembro de 2019

Lançamento de androidx.navigation:navigation-*:2.1.0. As confirmações incluídas nessa versão podem ser encontradas neste link.

Mudanças importantes desde a versão 2.0.0

  • Como usar o ViewModels no escopo de um gráfico de navegação: agora você pode criar ViewModels com escopo no nível do gráfico de navegação usando a propriedade by navGraphViewModels() delegada para usuários de Kotlin usando as bibliotecas -ktx ou a API getViewModelStoreOwner() adicionada a NavController. Consulte Compartilhar dados relacionados à IU entre os destinos para mais informações.
  • Destinos de caixa de diálogo: agora você pode criar destinos <dialog> que vão mostrar um DialogFragment quando você navigate para eles. NavHostFragment aceita destinos de caixas de diálogo por padrão. Consulte Criar um destino a partir de um DialogFragment para mais informações.
  • Navegação pelo URI: agora você pode navigate com um Uri, que usa o <deepLink> adicionado a um destino para navegar por ele. Consulte Navegar usando o URI para mais informações.
  • NavHostController: APIs usadas especificamente para a construção de um NavHost personalizado foram movidas para NavHostController, permitindo que implementações conectassem NavController ao host LifecycleOwner, OnBackPressedDispatcher e ViewModelStore.

Versão 2.1.0-rc01

7 de agosto de 2019

androidx.navigation:navigation-*:2.1.0-rc01 é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.

Mudanças na API

  • A API getViewModelStore() descontinuada no NavController que foi introduzida na versão 2.1.0-alpha02 foi removida (aosp/1091021).

Versão 2.1.0-beta02

19 de julho de 2019

androidx.navigation:*:2.1.0-beta02 é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Removida dependência não intencional do Jacoco, introduzida no 2.1.0-beta01 (b/137782950).

Versão 2.1.0-beta01

17 de julho de 2019

androidx.navigation:*:2.1.0-beta01 é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • NavigationUI agora anima a remoção do botão para cima ao usar setupWithNavController() com Toolbar ou CollapsingToolbarLayout (b/131403621).

Correções de bugs

  • Correção de um problema de tempo ao usar vários NavHostFragments com o mesmo contêiner com findNavController() (b/136021571).

Versão 2.1.0-alpha06

2 de julho de 2019

Lançamento de androidx.navigation:*:2.1.0-alpha06. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • O atributo app:navGraph usado por NavHostFragment agora foi movido para o artefato navigation-runtime. Navegadores personalizados que podem ser adicionados via XML precisam usar esse atributo para ter integração com o painel "Host" do Navigation Editor (b/133880955).

Mudanças na API

  • A API getViewModelStore() no NavController foi descontinuada e substituída pelo novo método getViewModelStoreOwner(), que retorna um ViewModelStoreOwner (aosp/987010).
  • A implementação de destinos de janelas flutuantes, como destinos <dialog>, foi generalizada em uma interface de marcador, FloatingWindow, que agora todos os destinos <dialog> implementam. Agora, os métodos NavigationUI para interação com a barra de apps superior ignoram os destinos FloatingWindow (b/133600763)

Mudanças de comportamento

  • O Navigation agora mantém corretamente o estado sincronizado com o que é visto na tela ao usar um destino <dialog>. Como consequência, o Navigation agora exibe automaticamente destinos <dialog> quando você navega para um destino que não tem caixas de diálogo ou atividades, como um destino <fragment> (b/134089818, link em inglês)

Correções de bugs

  • O Navigation agora suprime a animação que ocorre ao recriar a atividade durante a manipulação de um link direto, corrigindo um flash visual (b/130362979).
  • Corrigido um bug em que a backstack do Navigation ficava dessincronizada ao mostrar um novo fragmento enquanto o fragmento inicial estava sendo adicionado (b/133832218).

Versão 2.1.0-alpha05

5 de junho de 2019

androidx.navigation:*:2.1.0-alpha05 é lançado. As confirmações incluídas nessa versão podem ser encontradas neste link.

Mudanças na API

  • As APIs relacionadas ao host em NavController foram renomeadas e movidas para uma nova subclasse de NavController, NavHostController (aosp/966091).
  • O método setHostOnBackPressedDispatcherOwner() do NavController foi substituído pelo método setOnBackPressedDispatcher() do NavHostController e agora exige que você chame setLifecycleOwner() antes dele (aosp/965409).
  • NavHostController agora contém um método enableOnBackPressed(boolean) que substitui a classe NavHostOnBackPressedManager que foi retornada anteriormente por setHostOnBackPressedDispatcherOwner() (aosp/966091).

Correções de bugs

  • Correção de um problema em que a backstack ficava incorreta depois da navegação pelo URI (b/132509387).
  • Os links diretos manipulados automaticamente pelo NavController agora são acionados apenas uma vez (b/132754763).

Versão 2.1.0-alpha04

16 de maio de 2019

androidx.navigation:*:2.1.0-alpha04 é lançado. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • NavHostFragment respeita corretamente o app:defaultNavHost ao interceptar os eventos do botão "Voltar" do sistema, corrigindo uma regressão no Navigation 2.1.0-alpha03 b/132077777.
  • DialogFragmentNavigator agora lida corretamente com as operações popBackStack() e navigateUp() b/132576764.
  • Correção de um problema IllegalStateException: unknown destination during restore ao navegar repetidamente entre gráficos aninhados (b/131733658).

Versão 2.1.0-alpha03

7 de maio de 2019

Lançamento de androidx.navigation:*:2.1.0-alpha03. As confirmações incluídas nessa versão podem ser encontradas neste link.

Problemas conhecidos

  • NavHostFragment continua a interceptar o botão "Voltar" do sistema apesar de usar app:defaultNavHost="false" (b/132077777).

Novos recursos

  • Agora você pode criar destinos <dialog> que mostrarão um DialogFragment quando você navigate para eles. NavHostFragment aceita destinos de caixas de diálogo por padrão (b/80267254).
  • Agora, além de chamar navigate com um código de recurso ou uma instância NavDirections, você pode navegar com um Uri, que usa o <deepLink> que você adicionou a um destino para navegar para o destino correto (b/110412864).

Mudanças de comportamento

  • As animações padrão fornecidas pela NavigationUI foram aceleradas de 400 ms para 220 ms a fim de corresponder à velocidade de animação padrão de atividades e fragmentos (b/130055522).

Mudanças na API

  • O uso do método createFragmentNavigator() do NavHostFragment foi descontinuado, e a funcionalidade dele foi movida para o novo método onCreateNavController() para deixar mais claro que esse é o ponto de entrada correto para adicionar navegadores personalizados ao criar subclasses de NavHostFragment b/122802849.
  • Um método hasDeepLink() foi adicionado a NavDestination para permitir que você verifique se um determinado Uri pode ser manipulado por esse destino ou, no caso de um NavGraph, por qualquer destino no gráfico de navegação (b/117437718).

Correções de bugs

  • Os argumentos padrão agora são transmitidos corretamente para instâncias OnDestinationChangedListener (b/130630686).
  • NavHostFragment agora intercepta os eventos do botão "Voltar" do sistema usando OnBackPressedDispatcher. Isso corrige o problema que ocorria durante uma navegação condicional nos métodos de ciclo de vida do Fragment ao retornar para um Fragment (b/111598096).
  • Para o Safe Args, um android:defaultValue=”@null” com app:argType não especificado agora é inferido corretamente como um argumento string b/129629192.

Versão 2.1.0-alpha02

3 de abril de 2019

Lançamento de androidx.navigation:*:2.1.0-alpha02. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Agora você pode criar ViewModels com escopo no nível do gráfico de navegação usando a propriedade by navGraphViewModels() delegada para usuários do Kotlin ou a API getViewModelStore() adicionada a NavController b/111614463.

Mudanças na API

  • Agora você pode adicionar um app:targetPackage a um destino <activity> para limitar o nome do pacote correspondente. Ele oferece suporte a app:targetPackage="${applicationId}" para restringir o pacote ao ID do seu aplicativo (b/110975456).

Correções de bugs

  • Os destinos android:name para <activity> não são mais analisados em uma classe durante a inflação, evitando ClassNotFoundExceptions ao usar recursos dinâmicos (b/124538597).

Versão 2.1.0-alpha01

19 de março de 2019

Esta é a primeira versão alfa do Navigation 2.1.0.

Mudanças na dependência

  • O Navigation agora depende de androidx.core:core:1.0.1 e androidx.fragment:fragment:1.1.0-alpha05. Esta versão também remove a dependência de androidx.legacy:legacy-support-core-utils:1.0.0 b/128632612.

Mudanças na API

  • Um novo método Navigation.createNavigateOnClickListener(NavDirections) foi adicionado como alternativa à criação de um listener de clique com um pacote e ID de recurso (b/127631752).
  • O FragmentNavigator.instantiateFragment foi descontinuado. A implementação padrão agora usa FragmentFactory para instanciar fragmentos (b/119054429).

Correções de bugs

  • O Navigation não envia mais um Bundle nulo quando há argumentos anexados a um destino, corrigindo um problema ao usar android:defaultValue="@null" b/128531879.
  • O Safe Args agora depende do KotlinPoet 1.1.0, o que corrige um problema com nomes de pacotes extremamente longos (b/123654948).

Versão 2.0.0

Versão 2.0.0

14 de março de 2019

Lançamento do Navigation 2.0.0 sem mudanças de 2.0.0-rc02.

Versão 2.0.0-rc02

6 de março de 2019

O Navigation 2.0.0-rc02 oferece novos artefatos com o ID do grupo androidx.navigation e muda as dependências para os equivalentes do AndroidX.

O comportamento do 2.0.0-rc02 é idêntico ao do Navigation 1.0.0-rc02, e nenhuma mudança no código será necessária para atualizar a 1.0.0-rc02, além da atualização das suas dependências para corresponder às novas dependências.

Seu projeto precisa ter migrado para o AndroidX para usar as versões 2.X do Navigation. O Navigation 1.0 estável será a última versão que vai usar as dependências da Biblioteca de Suporte. Todo o desenvolvimento futuro além da versão 1.0 vai ser baseado no AndroidX e na versão estável 2.0.

Dependências anteriores ao AndroidX

Para as versões anteriores ao AndroidX do Navigation, inclua estas dependências:

dependencies {
    def nav_version = "1.0.0"

    implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
    implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}

Para Safe Args, adicione o seguinte classpath ao arquivo build.gradle de nível superior:

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
    }
}

Versão 1.0.0

Versão 1.0.0

14 de março de 2019

Lançamento do Navigation 1.0.0 sem mudanças de 1.0.0-rc02.

Versão 1.0.0-rc02

26 de fevereiro de 2019

Este é o segundo candidato a lançamento da versão estável do Navigation 1.0.0. Essa versão contém várias correções de bugs.

Correções de bugs

  • Corrigido um problema em que popBackStack() era ignorado se o gráfico raiz não tivesse um ID (b/126251695).
  • navigateUp() agora gerencia corretamente a navegação de volta à tarefa do app quando é chamado depois de processar um link direto sem FLAG_ACTIVITY_NEW_TASK (b/126082008).
  • Foi corrigido um problema com o ActivityNavigator.applyPopAnimationsToPendingTransition, que não aplicava a animação correta de saída (b/126237567).
  • O código Kotlin gerado pelo Safe Args agora faz corretamente o escape das palavras-chave do Kotlin, como in e fun no nome do pacote associado à classe R (b/126020455).

Versão 1.0.0-rc01

21 de fevereiro de 2019

Este é um candidato a lançamento da versão estável do Navigation 1.0.0. Essa versão contém uma correção de bug.

Correções de bugs

  • Correção de um problema ao usar o Android Fragments e operações de navegação (singleTop b/124294805).

Versão 1.0.0-beta02

12 de fevereiro de 2019

Esta versão inclui uma série de pequenas melhorias e correções de bugs importantes.

Novos recursos

  • Agora você pode usar 0 como um android:defaultValue para argumentos reference (b/124248602).

Mudanças de comportamento

  • As correspondências exatas dos links diretos agora são priorizadas em relação aos links diretos com .* ou correspondências de argumentos (b/123969518).

Correções de bugs

  • popBackStack() e navigateUp agora retornam corretamente false ao colocar o último destino na pilha de retorno, corrigindo uma regressão introduzida em 1.0.0-beta01 b/123933201.
  • O Navigation agora define corretamente o ClassLoader durante a restauração do estado salvo da instância, evitando problemas ao usar classes personalizadas no estado salvo do Navigator ou em argumentos enviados a um NavDestination b/123893858
  • As classes NavArgs geradas pelo Safe Args não falham mais ao restaurar um argumento Parcelable[] do estado da instância salva b/123963545.
  • O Safe Args agora limpa corretamente as classes Kotlin geradas sem necessidade (b/124120883).

Versão 1.0.0-beta01

4 de fevereiro de 2019

Esta é a primeira versão beta do Navigation. Daqui em diante, espera-se que a API do Navigation permaneça estável até a próxima versão, a menos que haja um problema crítico. Essa versão contém algumas correções de bugs e mudanças de comportamento.

Mudanças de comportamento

  • O Navigation agora garante que os valores padrão do argumento sejam tratados de forma idêntica durante a execução e pelo Safe Args. Como consequência, somente argumentos com app:argType="reference" podem ter um ponto de valor padrão para outro recurso (por exemplo, @color/colorPrimary). A tentativa de usar um valor padrão de referência com um app:argType diferente resultará em uma exceção ao analisar o XML de navegação b/123551990.
  • O Safe Args agora depende do Plug-in do Android para Gradle 3.3.0 (aosp/888413).
  • O Safe Args agora depende do Kotlin 1.3.20 (aosp/888414).

Correções de bugs

  • O Safe Args agora pode ser usado em módulos de biblioteca e de recursos em todas as versões do Plug-in do Android para Gradle (b/121304903).
  • Foi corrigida uma regressão que fazia com que uma única operação popBackStack() exibisse todas as cópias de um destino da parte de cima do backstack em vez de apenas um destino por vez (b/123552990).
  • Foi corrigido um problema em que o estado FragmentNavigator ficava dessincronizado com o do NavController, causando uma IllegalStateException ao tentar restaurar o backstack (b/123803044).
  • Correção de um problema em que a seta para voltar gerenciada pela NavigationUI não aparecia ao usar o ProGuard com ofuscação b/123449431.
  • O código gerado pelo Safe Args agora é processado corretamente com o uso de um app:argType apontando para uma classe interna estática no formato .OuterClass$InnerClass b/123736741.
  • O código Java gerado pelo Safe Args agora processa corretamente ações globais e destinos profundamente aninhados (b/123347762).

Versão 1.0.0-alpha11

23 de janeiro de 2019

Esta é uma versão hotfix de 1.0.0-alpha10 que corrige um problema com o Safe Args.

Correções de bugs

  • Correção de um problema em que o Safe Args falhava ao importar a classe Directions associada às ações globais (b/123307342).

Versão 1.0.0-alpha10

23 de janeiro de 2019

Problemas conhecidos

  • O Safe Args falha ao importar a classe Directions associada às ações globais b/123307342.

Esta versão contém alterações interruptivas da API. Consulte a seção Alterações interruptivas abaixo.

Novos recursos

  • Os usuários do Kotlin agora podem usar a delegação da propriedade by navArgs() para receber lentamente uma referência a uma classe NavArgs gerada pelo Safe Args em uma Activity ou Fragment b/122603367.
  • O Safe Args agora permite gerar o código Kotlin aplicando o plug-in androidx.navigation.safeargs.kotlin. O código Kotlin foi criado especificamente para módulos exclusivos do Kotlin, usando argumentos padrão e classes imutáveis sobre o padrão do builder, que ainda está disponível no plug-in androidx.navigation.safeargs (b/110263087).

Mudanças de comportamento

  • Os links diretos correspondentes agora são direcionados ao link direto que tem os argumentos com nível mais alto de correspondência (b/118393029).
  • Agora, a ação de chamar setGraph() em um NavController vai redefinir a backstack (b/111450672).
  • Os links diretos desconhecidos não geram mais uma IllegalStateException, mas são ignorados, corrigindo problemas com NavHostFragments aninhados ou múltiplos (b/121340440).

Alterações interruptivas

  • O método NavOptions.applyPopAnimationsToPendingTransition() para aplicar animações de destaque a uma atividade foi movido para ActivityNavigator b/122413117.
  • O Safe Args agora evita duplicar classes idênticas para ações sem argumentos. O tipo de retorno para métodos sem argumento nas classes NavDirections geradas é NavDirections b/123233147
  • As classes Directions geradas pelo Safe Args não têm mais um construtor público. Interaja somente com os métodos estáticos gerados b/123031660.
  • As classes NavDirections geradas pelo Safe Args não têm mais um construtor público. Elas só podem ser geradas por um dos métodos estáticos nas classes Directions geradas (b/122963206).
  • O Bundle retornado de getArguments() do NavDirections agora está marcado como @NonNull, em vez de @Nullable (b/123243957).

Correções de bugs

  • Agora, NavDeepLinkBuilder processa corretamente vários PendingIntents simultâneos para o mesmo destino usando os argumentos que você transmite para determinar a exclusividade (b/120042732).
  • Agora, NavController processa corretamente as operações popBackStack() ao usar um NavHostFragment aninhado ou outros fragmentos filhos com uma backstack (b/122770335).
  • Agora, NavigationUI define corretamente a descrição do conteúdo do botão "Para cima" (b/120395362).
  • As classes Directions geradas pelo Safe Args agora processam corretamente ações globais que têm o mesmo ID que uma ação de um destino (b/122962504).
  • As classes NavDirections geradas pelo Safe Args agora têm valores hashCode() iguais corretos quando equals() retorna "true" b/123043662.
  • FragmentNavigator agora gera uma mensagem de erro melhor se você tenta fazer FragmentTransactions personalizadas no FragmentManager do NavHostFragment. Sempre use getChildFragmentManager(). b/112927148.

Versão 1.0.0-alpha09

18 de dezembro de 2018

Esta versão contém alterações interruptivas da API. Consulte a seção Alterações interruptivas abaixo.

Optamos por não continuar o desenvolvimento do artefato android.arch.navigation:navigation-testing. Embora ele tenha se mostrado útil nos testes internos do NavController, é altamente recomendável usar estratégias de teste alternativas, como a simulação da instância NavController, para verificar se as chamadas de navigate() corretas estão sendo feitas. Essa abordagem é discutida em detalhes na palestra Atividade Única na Conferência de Desenvolvedores Android 2018 (vídeo em inglês), e vamos providenciar outra documentação, especificamente com relação a testes com Navigation.

Novos recursos

  • MenuItems com menuCategory="secondary" não vão mais ser exibidos na backstack quando usados com métodos NavigationUI (b/120104424).
  • AppBarConfiguration agora permite que você defina uma instância substituta de OnNavigateUpListener que é chamada quando navController.navigateUp() retorna false b/79993862 b/120690961.

Alterações interruptivas

  • Ao usar um <argument> com um argType="reference", o Navigation não vai mais analisar a referência, mas vai fornecer o próprio ID de recurso bruto (b/111736515).
  • Agora, onNavDestinationSelected() retorna ao destino inicial do seu gráfico de navegação por padrão, tornando-o consistente com os métodos setup. Adicione menuCategory="secondary" ao seu MenuItem para evitar a exibição da pilha de retorno (aosp/852869).
  • Os métodos fromBundle() das classes Args geradas agora assumem um valor Bundle não nulo em vez de um valor anulável de Bundle (aosp/845616).

Correções de bugs

  • Agora, os argumentos são analisados corretamente nos links diretos como o argType correto, em vez de sempre como strings (b/110273284).
  • O Navigation agora exporta corretamente os próprios recursos públicos (b/121059552).
  • O Safe Args agora oferece suporte ao Plug-in do Android para Gradle 3.4 Canary 4 e versões mais recentes (b/119662045).

Versão 1.0.0-alpha08

6 de dezembro de 2018

Esta versão contém alterações interruptivas da API. Consulte a seção Alterações interruptivas abaixo.

Novos recursos

  • Os rótulos de destino, quando usados com os métodos NavigationUI, vão substituir automaticamente as instâncias do {argName} no seu android:label com o argumento correto (b/80267266).
  • O Navigation agora depende da Biblioteca de Suporte 28.0.0 (b/120293333).

Alterações interruptivas

  • OnNavigatedListener foi renomeado como OnDestinationChangedListener (b/118670572).
  • OnDestinationChangedListener agora também transmite o Bundle de argumentos (aosp/837142).
  • Os atributos app:clearTask e app:launchDocument e os métodos associados foram removidos. Use app:popUpTo com a raiz do seu gráfico para remover todos os destinos da backstack (b/119628354).
  • ActivityNavigator.Extras agora usa um padrão Builder e adiciona a capacidade de definir qualquer flag Intent.FLAG_ACTIVITY_ (aosp/828140).
  • NavController.onHandleDeepLink foi renomeado como handleDeepLink aosp/836063.
  • Muitas classes e métodos que não se destinam à subclassificação, como NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, se tornaram final (aosp/835681).
  • O método NavHostFragment.setGraph() descontinuado foi removido (aosp/835684).
  • O método NavigationUI.navigateUp(DrawerLayout, NavController) descontinuado foi removido (aosp/835684).
  • A criação de Fragment foi movida para FragmentNavigator, facilitando a delegação da criação de Fragment para um FragmentFactory (b/119054429).
  • O construtor para NavGraphNavigator não usa mais um Context aosp/835340.
  • NavigatorProvider agora é uma classe, em vez de uma interface. O NavigatorProvider retornado por getNavigatorProvider() não mudou a funcionalidade aosp/830660.
  • O NavDestination.navigate() foi removido. Em vez disso, chame navigate() no Navigator (aosp/830663).
  • Refatoração significativa do Navigator, removendo a necessidade de OnNavigatorNavigatedListener e fazendo com que navigate retorne o NavDestination a que a navegação ocorreu.
  • As instâncias do Navigator não podem mais enviar eventos de pop para o NavController. Considere usar um OnBackPressedCallback para interceptar o pressionamento do botão "Voltar" e chamar navController.popBackStack() (aosp/833716).

Correções de bugs

  • popUpTo agora funciona consistentemente quando o destino é um elemento <navigation> (b/116831650).
  • Diversos bugs que resultavam em uma IllegalArgumentException ao usar gráficos aninhados foram corrigidos (b/118713731, b/113611083, b/113346925, b/113305559).
  • O atributo dataPattern de destinos <activity> agora preencherá argumentos de argumentos não String chamando toString() b/120161365.

Safe Args

  • Safe Args compatível com objetos Serializable, incluindo valores Enum. Tipos Enum podem definir um valor padrão usando a enumeração literal sem o nome da classe, por exemplo, app:defaultValue="READ" (b/111316353).
  • O Safe Args funciona com matrizes de todos os tipos com suporte (b/111487504).
  • O Safe Args agora ignora subpastas de diretórios de recursos (b/117893516).
  • O Safe Args adiciona anotações @Override quando apropriado (b/117145301).

Versão 1.0.0-alpha07

29 de outubro de 2018

Novos recursos

  • Uma nova classe AppBarConfiguration permite personalizar quais destinos são considerados destinos de nível superior. Consulte a documentação atualizada para ver mais detalhes (b/117333663).
  • Agora você pode transferir argumentos para o destino inicial do seu gráfico (b/110300470).
  • Os links diretos agora oferecem suporte a esquemas personalizados com pontos, hífens e sinais de adição (b/112806402).

Alterações interruptivas

  • O módulo navigation-testing-ktx foi incorporado no navigation-testing artifact e não vai mais ser publicado.
  • O artefato navigation-testing agora depende da biblioteca padrão Kotlin. A API foi alterada para ser mais consistente com as convenções do Kotlin, mas você pode continuar a usá-la para testes escritos em Java.
  • Não há mais suporte a gráficos de navegação registrados com manifestos de metadados (b/118355937).
  • As ações não podem mais ser anexadas a destinos de <activity> aosp/785539.

Correções de bugs

  • Os links diretos agora analisam os parâmetros de consulta corretamente (b/110057514).
  • Os destinos de atividade agora aplicam corretamente todas as animações de entrada e saída (b/117145284).
  • Corrigidas falhas que ocorrem depois que a configuração é alterada ao usar Navigators personalizados (b/110763345).

Safe Args

  • Safe Args agora tem uma dependência fixa no Android Gradle Plugin 3.2.1 (b/113167627).
  • Diretivas agora podem ser geradas para classes internas (b/117407555).
  • Correção de um problema ao gerar diretivas para um gráfico <include> (b/116542123).

Versão 1.0.0-alpha06

20 de setembro de 2018

Novos recursos

Mudanças na API

  • Alteração interruptiva: o método navigate() do Navigator agora usa um parâmetro Navigator.Extras.
  • O método getGraph() do NavController agora é NonNull b/112243286.

Correções de bugs

  • NavigationUI.setupWithNavController() não vaza mais visualizações se usado com visualizações de destinos individuais (b/111961977).
  • O onSaveState()do Navigator agora é chamado apenas uma vez (b/112627079).

Safe Args

  • As classes de diretivas do destino do Navigation agora estendem a classe do pai correspondente, se ele existir (b/79871405).
  • As classes Directions e Args agora têm uma implementação toString()b/111843389.

Versão 1.0.0-alpha05

10 de agosto de 2018

Correções de bugs

  • Correção de um bug que causa um comportamento incorreto da backstack (b/111907708).
  • Correção de um bug em equals() de classes Generated Args (b/111450897).
  • Correção de um erro de compilação no Safe Args (b/109409713).
  • Correção de uma conversão de identificadores de recursos para nomes Java. b/111602491
  • Correção de mensagens de erro sobre a capacidade de anulação no plug-in Safe Args.
  • Adição de anotações de anulação ausentes.

Versão 1.0.0-alpha04

19 de julho de 2018

O Navigation 1.0.0-alpha04 e o plug-in Safe Args associado do Gradle contêm várias mudanças da API, mudanças de comportamento e correções de bugs.

Mudanças de API / comportamento

  • O NavHostFragment sempre vai definir o Fragment atual como o fragmento de navegação principal, garantindo que os gerenciadores de fragmentos filhos sejam abertos antes que o NavController externo seja exibido (b/111345778).

Safe Args

  • Alteração interruptiva: app:type mudou para app:argType para evitar conflitos com outras bibliotecas, como ConstraintLayout 2.0.0-alpha1 (b/111110548).
  • Agora é possível clicar em mensagens de erro de Safe Args (b/111534438).
  • Agora, as classes Args confirmam se os atributos NonNull realmente não são nulos (b/111451769).
  • Adição de outras anotações NonNull às classes NavDirections e Args geradas b/111455455 (b/111455456).

Correções de bugs

  • Correção de um problema com o botão "Voltar" do sistema depois de um link direto para um destino de fragmento (b/111515685).

Versão 1.0.0-alpha03

12 de julho de 2018

O Navigation 1.0.0-alpha03 e o plug-in Safe Args associado do Gradle contêm várias mudanças da API, mudanças de comportamento e correções de bugs.

Mudanças de API / comportamento

  • Adição de um método NavigationUI.setupWithNavController para a Barra de Ferramentas Google. b/109868820
  • Adição de um método NavigationUI.setupWithNavController para CollapsingToolbarLayout (b/110887183).
  • popBackStack() agora retorna "false" quando o backstack está vazio ou quando o código de destino fornecido não consta no backstack (b/110893637).
  • O FragmentNavigator agora ignora as operações de navegação após o FragmentManager ter salvo o estado, evitando as exceções “Não foi possível realizar esta ação depois de onSaveInstanceState” (b/110987825).

Safe Args

  • Alteração interruptiva: caracteres não alfanuméricos em nomes de ação e argumento vão ser substituídos pelo estilo CamelCase nos respectivos nomes de método do NavDirections.
    • Por exemplo, DemoController.index se torna setDemoControllerIndex (b/79995048).
    • Por exemplo, action_show_settings se torna actionShowSettings (b/79642240).
  • Alteração interruptiva: os argumentos agora são considerados não nulos por padrão. Para permitir valores nulos em argumentos parceláveis e de string, adicione app:nullable="true" (b/79642307).
  • Agora é possível usar app:type="long" com defaultValues na forma de "123L" (b/79563966).
  • Os argumentos parcelable agora são compatíveis, usando um nome de classe totalmente qualificado para app:type. O único valor padrão compatível é "@null" (b/79563966).
  • As classes de Args agora implementam equals() e hashCode() (b/79642246).
  • O plug-in Safe Args agora pode ser aplicado a projetos de biblioteca (b/80036553).
  • O plug-in Safe Args agora pode ser aplicado a projetos de recursos. b/110011752

Correções de bugs

  • Correção de problemas de navegação durante os métodos de ciclo de vida do Fragment. b/109916080
  • Correção de problemas de navegação por gráficos aninhados várias vezes (b/110178671).
  • Correção de problemas ao usar setPopUpTo com o primeiro destino no gráfico (b/109909461).
  • Correção de problemas em que todos os valores app:defaultValue estavam sendo transmitidos como Strings (b/110710788).
  • O AAPT2 incluído no Plug-in do Android para Gradle 3.2 Beta 01 agora mantém regras para todos os atributos android:name em arquivos XML do Navigation (b/79874119).
  • Correção de vazamento de memória ao substituir o FragmentNavigator padrão (b/110900142).

Versão 1.0.0-alpha02

7 de junho de 2018

Mudanças de comportamento

  • FragmentNavigator agora usa setReorderingAllowed(true) b/109826220.

  • O Navigation agora aplica URLDecodes a argumentos analisados de URLs de links diretos (b/79982454).

Correções de bugs

  • Correção de uma IllegalStateException ao chamar a navegação dos métodos de ciclo de vida do Fragment (b/79632233).

  • O Navigation agora depende da Biblioteca de Suporte 27.1.1 para corrigir a tremulação ao usar animações (b/80160903).

  • Correção de uma IllegalArgumentException ao usar defaultNavHost="true" como um fragmento filho (b/79656847).

  • Correção de um StackOverflowError ao usar o NavDeepLinkBuilder (b/109653065).

  • Correção de um IllegalArgumentException ao navegar de volta para um gráfico aninhado (b/80453447).

  • Correção de um problema com a sobreposição de fragmentos ao usar launchSingleTop (b/79407969).

  • O Navigation agora cria a backstack sintética correta para gráficos aninhados (b/79734195).

  • A NavigationUI agora destaca o item correto ao usar um gráfico aninhado como um MenuItem (b/109675998).

Mudanças na API

  • O atributo clearTask das ações e a API associada em NavOptions foram descontinuados (b/80338878).

  • O atributo launchDocument das ações e a API associada em NavOptions foram descontinuados (b/109806636).

Versão 1.0.0-alpha01

8 de maio de 2018

O Navigation oferece um framework para criar a navegação no app. Essa versão inicial é 1.0.0-alpha01.