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

estabelecido.

Principais conceitos

A tabela abaixo oferece uma visão geral dos principais conceitos da navegação e os 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 dentro e fora do 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

Destino

Um nó no gráfico de navegação. Quando o usuário navega até esse nó, o host mostra o conteúdo dele.

NavDestination

Geralmente criado ao construir o gráfico de navegação.

Rota

Identifica exclusivamente um destino e todos os dados necessários para ele.

É possível navegar usando rotas. As rotas levam você aos destinos.

Qualquer tipo de dados serializáveis.

Benefícios e recursos

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

  • Animações e transições: fornecem recursos padronizados para animações e transições.
  • Link direto: implementa e processa links diretos que levam o usuário diretamente a um destino.
  • Padrões de interface:oferece suporte a padrões, como as gavetas de navegação e a navegação de nível baixo, com o mínimo de trabalho extra.
  • Segurança de tipos: inclui suporte para transmitir dados entre destinos com segurança de tipos.
  • Suporte ao 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: oferecem suporte e processam totalmente transações de fragmentos.
  • Voltar e subir: processa ações de voltar e subir corretamente por padrão.

Opções de framework

O componente Navigation oferece suporte a dois frameworks principais para implementar o gráfico de navegação, dependendo da arquitetura da interface do app:

  • Compose: se o app for totalmente criado com o Jetpack Compose, use o Navigation Compose. Os destinos no gráfico são combináveis.
  • Fragments: se o app usar visualizações ou uma combinação de visualizações e Compose, use o componente de navegação baseado em fragmentos. Os destinos no gráfico são fragmentos que podem hospedar visualizações padrão, conteúdo do Compose ou uma combinação dos dois.

Para aplicativos que estão migrando de visualizações para o Compose, a estratégia recomendada é continuar usando o componente de navegação baseado em fragmentos ao converter telas individuais para o Compose. Depois que todos os fragmentos forem substituídos por combináveis, você poderá migrar o gráfico de navegação para o Navigation Compose.

Configurar o ambiente

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

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.9.8"

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

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

Para informações sobre como adicionar outros componentes de arquitetura ao projeto, consulte Como adicionar componentes ao seu 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 (em inglês)

Exemplos