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.
Usado para navegação interna do seu aplicativo.
🌍 Intent Implícita
Você diz O QUE quer fazer, não QUEM deve fazer.
- 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.
startActivitycoloca um prato no topo.- Botão "Back" (Voltar) tira o prato do topo.
- 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.
🆚 Navegação: Android vs iOS
| 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!
🧭 Navigation Component (Jetpack)
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
- Crie uma nova Activity chamada
DetalhesActivity. - No
MainActivity, adicione um botão. - 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
- Crie uma tela com um
EditTexte umButton. - Ao clicar, abra uma segunda tela exibindo o texto que foi digitado.
- 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.