Pular para conteúdo

Aula 06 - Navegação entre Telas 🗺️


📨 O que é uma Intent?

Seu App é um conjunto de telas. As Intents são as mensagens que conectam essas telas.

  • "Quero abrir a tela X".
  • "Quero passar este dado para a tela Y".
  • "Quero que outro app resolva este link".

🚀 Intent Explícita

Você sabe exatamente para onde quer ir.

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)

Usado para navegação interna do seu aplicativo.


🌍 Intent Implícita

Você diz O QUE quer fazer, não QUEM deve fazer.

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
startActivity(intent)
  • O sistema Android pergunta ao usuário qual navegador ele prefere usar.

Exemplos Implícitos

  • ACTION_DIAL: Abrir o discador.
  • ACTION_SEND: Compartilhar algo.
  • ACTION_IMAGE_CAPTURE: Abrir a câmera.

📦 Passando Dados (Extras)

O "pacote" que viaja com a Intent.

// Tela A (Enviando)
intent.putExtra("NOME", "Android")
intent.putExtra("IDADE", 15)

// Tela B (Recebendo)
val nome = intent.getStringExtra("NOME")
val idade = intent.getIntExtra("IDADE", 0)

📚 A Pilha de Voltar (Back Stack)

O Android gerencia telas como uma pilha de pratos.

  1. startActivity coloca um prato no topo.
  2. Botão "Back" (Voltar) tira o prato do topo.
  3. O prato que estava embaixo volta a ser visível.

O Comando finish() 🧹

Encerra a Activity atual e a remove da pilha.

startActivity(Intent(this, HomeActivity::class.java))
finish() // O usuário não consegue voltar para a tela anterior

Ideal para fluxos de Login e Splash Screens.


Conceito Android iOS
Componente Activity ViewController
Pilha Back Stack Navigation Controller
Ação Intent Segue / Push
Dados Extras Properties / PrepareForSegue

🎨 Transições entre Telas

Dê vida ao seu app!

startActivity(intent)
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)

A forma moderna e visual.

  • Navigation Graph: Mapa visual das telas.
  • Fragments: Telas "leves" dentro de uma única Activity.
  • Safe Args: Passagem de dados sem erros de digitação.

🛠️ Prática: Indo para os Detalhes

  1. Crie uma nova Activity chamada DetalhesActivity.
  2. No MainActivity, adicione um botão.
  3. No clique do botão, peça para abrir os Detalhes.

Código da Prática

binding.btnIr.setOnClickListener {
    val intent = Intent(this, DetalhesActivity::class.java)
    intent.putExtra("INFO", "Vindo da Main!")
    startActivity(intent)
}

⚠️ Cuidado com a Memória

Abrir muitas Activities sem dar finish() pode deixar o app pesado e confuso.

Pergunte-se: "O usuário deve conseguir voltar para esta tela?"


🧬 Mermaid: Fluxo de Navegação

graph LR
    S[Splash] -->|finish| L[Login]
    L -->|finish| H[Home]
    H <--> D[Detalhes]
    H <--> P[Perfil]
    P -->|Logout + clear_task| L

🚀 Desafio da Aula: O Mensageiro

  1. Crie uma tela com um EditText e um Button.
  2. Ao clicar, abra uma segunda tela exibindo o texto que foi digitado.
  3. Na segunda tela, coloque um botão "Voltar" customizado que dá um finish().

🏁 Resumo

  • Intents: Mensageiros universais.
  • Extras: O conteúdo da mensagem.
  • Back Stack: A memória de onde viemos.

❓ Perguntas?


Próxima Aula: Listas Dinâmicas (RecyclerView)! 📋👋