Pular para conteúdo

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:

  1. LayoutManager: Define o formato (Lista, Grade, etc).
  2. ViewHolder: Guarda as referências dos IDs (Gaveta).
  3. 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!

holder.itemView.setOnClickListener {
    val item = lista[position]
    // Abrir detalhes...
}

🆚 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

  1. Crie um layout item_produto.xml.
  2. Crie a lista de objetos Produto.
  3. 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.

❓ Perguntas sobre Listas?


Próxima Aula: Consumo de APIs com Retrofit! 🌍👋