Aula 09 - Listas Eficientes (RecyclerView) 📋
🐢 O Problema das Listas Gigantes
Imagine uma lista com 10.000 contatos. Criar 10.000 objetos de layout travaria qualquer celular.
- Memória cheia.
- Lag na rolagem.
- App fechando (Crash).
♻️ A Mágica da Reciclagem
O RecyclerView não cria 10.000 itens. Ele cria apenas o que cabe na tela (+ uns 2 ou 3 de reserva).
- Item sai por cima -> Entra na "piscina".
- Item entra por baixo -> Pega um layout da piscina e só troca o texto.
O Mecanismo visual
graph TD
A[Item 1 sai ↑] --> P((Piscina de Views))
P --> B[Item 12 entra ↓]
⚔️ Os 3 Pilares
Para fazer um RecyclerView, você precisa de:
- LayoutManager: Define o formato (Lista, Grade, etc).
- ViewHolder: Guarda as referências dos IDs (Gaveta).
- Adapter: Liga os dados às Views (O Cérebro).
📐 1. LayoutManager
Troque a cara da sua lista com 1 linha:
- LinearLayoutManager: Lista vertical/horizontal.
- GridLayoutManager: Grade (estilo galeria).
- StaggeredGridLayoutManager: Grade tipo Pinterest.
🗄️ 2. ViewHolder
Evita que o Android tenha que procurar o findViewById milhares de vezes.
class MeuViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val nome = view.findViewById<TextView>(R.id.txtNome)
}
🧠 3. Adapter
Onde a lógica acontece.
onCreateViewHolder: Infla o layout do XML.onBindViewHolder: Coloca os dados na tela.getItemCount: Diz quantos itens a lista tem.
👆 Lidando com Cliques
O RecyclerView não tem clique nativo. Nós criamos!
🆚 Android vs iOS
O mecanismo é IGUAL. Só mudam os nomes.
| Conceito | Android | iOS |
|---|---|---|
| Componente | RecyclerView | UITableView |
| Reciclagem | Scrap Heap | Reusable Cell |
| Dados | Adapter | Data Source |
| Gaveta | ViewHolder | UITableViewCell |
🚀 Otimização: ListAdapter & DiffUtil
notifyDataSetChanged() é coisa do passado.
- O DiffUtil calcula o que mudou.
- Animações automáticas de inserção e remoção.
- Muito mais rápido para o processador.
🛠️ Prática: Lista de Compras
- Crie um layout
item_produto.xml. - Crie a lista de objetos
Produto. - Implemente o Adapter e veja a mágica da rolagem fluida.
Dica: CardView 🃏
Use MaterialCardView nos seus itens para ganhar sombras e bordas arredondadas automaticamente!
<com.google.android.material.card.MaterialCardView ...>
<!-- Seus textos/imagens aqui -->
</com.google.android.material.card.MaterialCardView>
⚠️ Erro Comum
Tentar atualizar a lista e esquecer de avisar o Adapter.
Sempre que o dado do banco/internet chegar, use:
adapter.submitList(novaLista) (se usar ListAdapter).
🏁 Conclusão
- RecyclerView é obrigatório em 99% dos apps.
- O foco é performance e economia de memória.
- Masterize o Adapter e você dominará o Android.