Navegação

A navegação se refere às interações que permitem aos usuários navegar, entrar e sair de diferentes partes do conteúdo no app.

O componente Navigation do Android Jetpack inclui a biblioteca Navigation, o plug-in Safe Args do Gradle e ferramentas para ajudar você a implementar a navegação no app. O componente de navegação processa diversos casos de uso de navegação, desde cliques simples em botões até padrões mais complexos, como barras de apps e a gaveta de navegação.

Principais conceitos

A tabela a seguir fornece uma visão geral dos três principais conceitos da navegação e dos principais tipos usados para implementá-los.

Conceito

Objetivo

Tipo

Host

Um elemento da interface que contém o destino de navegação atual. Ou seja, quando um usuário navega em um app, o app basicamente troca os destinos pelo host de navegação.

Gráfico

Uma estrutura de dados que define todos os destinos de navegação no app e como eles se conectam.

NavGraph

Controlador

O coordenador central para gerenciar a navegação entre destinos. O controlador oferece métodos para navegar entre destinos, processar links diretos, gerenciar a backstack e muito mais.

NavController

Benefícios e recursos

O componente Navigation oferece vários outros benefícios e recursos, incluindo:

  • Animações e transições:oferece recursos padronizados para animações e transições.
  • Links diretos:implementa e processa links diretos que levam o usuário diretamente a um destino.
  • Padrões da interface:oferece suporte a padrões, como as gavetas de navegação e a navegação da parte de baixo da tela, com o mínimo possível de trabalho extra.
  • Segurança de tipo:inclui o plug-in Safe Args do Gradle, que oferece segurança de tipos ao navegar e transmitir dados entre destinos.
  • Suporte a ViewModel:permite definir o escopo de um ViewModel para um gráfico de navegação para compartilhar dados relacionados à interface entre os destinos do gráfico.
  • Transações de fragmentos:oferece suporte e processamento total a transações de fragmentos.
  • Voltar e cima:gerencia ações de volta e de cima corretamente por padrão.

Configurar o ambiente

Para incluir suporte à navegação no projeto, adicione as dependências abaixo ao arquivo build.gradle do app:

Groovy

dependencies {
  def nav_version = "2.7.7"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

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

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

Kotlin

dependencies {
  val nav_version = "2.7.7"

  // Java language implementation
  implementation("androidx.navigation:navigation-fragment:$nav_version")
  implementation("androidx.navigation:navigation-ui:$nav_version")

  // Kotlin
  implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
  implementation("androidx.navigation:navigation-ui-ktx:$nav_version")

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

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

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

Para mais informações sobre como adicionar outros componentes de arquitetura ao projeto, consulte Adicionar componentes ao projeto.

Próximas etapas

Para conferir mais documentações e recursos relacionados ao componente Navigation, consulte as informações abaixo.

Guias detalhados

Para mais informações sobre como implementar um host de navegação e um NavController, bem como detalhes sobre como eles interagem com o Compose e outros frameworks de interface, consulte os guias abaixo:

Codelabs

Vídeos

Exemplos