103 lines
2.7 KiB
Markdown
103 lines
2.7 KiB
Markdown
# 🔄 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 75–109)
|
||
|
||
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 40–53)
|
||
|
||
```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 63–72)
|
||
|
||
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)
|
||
```
|