Files
cuidamais_med/docs/08_Adapters.md
2026-04-22 12:41:12 +01:00

103 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔄 Adapters — Adaptadores RecyclerView
> **Pasta:** `app/src/main/java/com/example/medcuida/pro/ui/adapters/`
Os Adapters fazem a ligação entre os **dados** (listas de objetos) e as **views** (itens visuais no RecyclerView). Cada adapter tem um `ViewHolder` interno que mapeia os elementos do layout XML.
---
## ConsultaAdapter.java (113 linhas)
**Layout do item:** `item_consulta_medico.xml`
### Para que serve
Mostra cada consulta na lista da agenda com: nome do paciente, data/hora, status e botões de ação.
### Interfaces (callbacks)
```java
interface OnConsultaActionClickListener {
void onAceitarClick(Consulta consulta); // Botão "Confirmar"
void onEliminarClick(Consulta consulta); // Botão "Cancelar"
}
interface OnConsultaClickListener {
void onConsultaClick(Consulta consulta); // Clique no item inteiro
}
```
### Lógica do `bind()` (Linhas 75109)
1. **Nome do paciente** → mostra `pacienteNome` ou `"Desconhecido"`
2. **Data e hora** → combina `data` + `hora` (ex: `"22/04/2026 às 14:30"`)
3. **Status** → mostra o texto do status atual
4. **Botão Confirmar:**
- Visível **apenas** se o status for `"Pendente"`
- Chama `onAceitarClick()` ao clicar
5. **Botão Cancelar:**
- **Sempre visível**
- Chama `onEliminarClick()` ao clicar
6. **Clique no item** → chama `onConsultaClick()`
---
## MensagemAdapter.java (74 linhas)
**Layout do item:** `item_mensagem.xml`
### Para que serve
Mostra cada mensagem no chat. Distingue visualmente mensagens **enviadas** vs **recebidas**.
### Como funciona (Linhas 4053)
```java
if (mensagem.getSenderId().equals(currentUserId)) {
// Mostrar layout de mensagem ENVIADA (direita)
} else {
// Mostrar layout de mensagem RECEBIDA (esquerda)
}
```
- Cada item tem **dois layouts** (`layout_msg_enviada` e `layout_msg_recebida`)
- Apenas um fica visível de cada vez, com base no `senderId`
- O `currentUserId` é passado no construtor
---
## PacienteAdapter.java (75 linhas)
**Layout do item:** `item_paciente.xml`
### Para que serve
Mostra cada paciente numa lista simples com nome e email.
### Interface
```java
interface OnPacienteClickListener {
void onPacienteClick(Paciente paciente);
}
```
### Lógica do `bind()` (Linhas 6372)
1. **Nome** → mostra `nome` ou `"Desconhecido"`
2. **Email** → mostra `email` ou `"N/A"`
3. **Clique no item** → chama `onPacienteClick()`
---
## Padrão Comum dos 3 Adapters
Todos seguem a mesma estrutura:
```
1. Extends RecyclerView.Adapter<ViewHolder>
2. Lista interna de dados
3. Método setXxx(List) para atualizar + notifyDataSetChanged()
4. onCreateViewHolder → infla o layout XML
5. onBindViewHolder → preenche os dados
6. getItemCount → retorna tamanho da lista
7. ViewHolder interno (static class)
```