Aula 06 - Navegação entre Telas 🗺️
Objetivo
Objetivo: Aprender a navegar entre Activities usando Intents, passar dados entre telas e entender a pilha de navegação (Back Stack).
1. O que é uma Intent? 📨
Uma Intent (Intenção) é uma mensagem que o Android usa para pedir uma ação. * "Quero abrir a tela de Login". * "Quero abrir a Câmera". * "Quero compartilhar esse texto".
Tipos de Intent
- Explícita: Você diz exatamente qual classe abrir. (Navegação interna).
- Ex: Ir da Home para Detalhes.
- Implícita: Você diz o que quer fazer, e o Android procura quem resolva.
- Ex: Abrir um site (Navegador), Tirar foto (App de Câmera).
2. Navegando para outra Activity 🚀
🆚 Comparação: Segues e NavigationController (iOS)
No iOS, usamos performSegue ou navigationController?.pushViewController(...). A Intent do Android funciona como o "empurrão" para a próxima tela.
3. Passando Dados (Extras) 📦
Como enviar o nome do usuário para a próxima tela?
Activity A (Origem):
val intent = Intent(this, HomeActivity::class.java)
intent.putExtra("NOME_USUARIO", "Ricardo")
intent.putExtra("ID_USUARIO", 123)
startActivity(intent)
Activity B (Destino):
val nome = intent.getStringExtra("NOME_USUARIO")
val id = intent.getIntExtra("ID_USUARIO", -1) // -1 é valor padrão
🆚 Comparação: Prepare for Segue (iOS)
No iOS, interceptamos a navegação no método prepare(for:sender:) para configurar as propriedades da próxima ViewController. No Android, os dados vão "empacotados" na Intent.
4. A Pilha de Voltar (Back Stack) 📚
O Android gerencia as telas como uma pilha de cartas. 1. Abre A. (Pilha: [A]) 2. A chama B. (Pilha: [A, B]) 3. B chama C. (Pilha: [A, B, C]) 4. Usuário aperta Voltar (Back). * C é destruída (onDestroy). * Voltamos para B (onResume). (Pilha: [A, B])
Finalizando uma Activity
Se você chamar finish() na Activity A, ela sai da pilha. * Útil para tela de Login (após logar, não queremos voltar para o login).
5. Navigation Component (Moderno) 🧭
Existe uma forma mais moderna de navegar usando Fragments e um gráfico visual (Navigation Graph). * Single Activity Architecture: Uma única Activity hospeda vários Fragments (telas). * XML de Navegação: Define visualmente as setas de uma tela pra outra.
Neste curso focaremos em Intents pois é a base fundamental. O Navigation Component abstrai as Intents por baixo.
6. Intents Implícitas (Abrindo outros apps) 🌍
Quer abrir um site?
val siteIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
startActivity(siteIntent)
Discar um número?
val discarIntent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:123456789"))
startActivity(discarIntent)
7. Desafio: O Fluxo de Login 🔐
Desenhe o fluxo (no papel ou Mermaid) e implemente o código: 1. Tela Splash: Exibe logo por 2 segundos e vai pra Login. (Usa Handler ou Coroutines para esperar, depois finish()). 2. Tela Login: Digita dados -> Botão Entrar -> Vai pra Home e mata Login. 3. Tela Home: Tem botão "Perfil" -> Vai pra Perfil (sem matar Home). 4. Tela Perfil: Botão "Sair" -> Limpa tudo e volta pra Login.
Dica: Para "limpar tudo" no Logout, use flags na Intent:
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
🔗 Materiais da Aula
-
Slides
Material visual com diagramas e conceitos-chave.
-
Quiz
Teste seu conhecimento com 10 questões interativas.
-
Exercícios
5 exercícios progressivos (básico → desafio).
-
Projeto
Aplicação prática dos conceitos da aula.