Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring RecyclerView.Adapter to ListAdapter #3

Open
wants to merge 1 commit into
base: template/coroutines
Choose a base branch
from

Conversation

isolino
Copy link
Collaborator

@isolino isolino commented May 20, 2020

O que é o ListAdapter?
É uma implementação otimizada do RecyclerView.Adapter e vem junto com a lib do RecyclerView

Ela é otimizada para quando uma nova lista é enviada para o ListAdapter, ela faz um diff (em background) para atualizar apenas nos items que precisam ser atualizados. Para que o diff seja feito, é necessário estender a classe DiffUtil.ItemCallback. Abaixo, deixo alguns links úteis.

Refatorando os ViewHolders
Além do ListAdapter, também refatorei o código dos ViewHolders. Tentei isolar ao máximo a responsabilidade de conhecer e e renderizar nestes caras (UserOkViewHolder e ErrorViewHolder).
Para exemplificar o uso de múltiplos layouts na RecyclerView, criei um layout de erro que será renderizado para Users com o primeiro nome maior que 5 letras.

Removendo onAttach
Este método era usado apenas para criar o adpater com context. Como removi o context do adapter e o adapter passou a ser criado na declaração.
private val usersListAdapter : UsersListAdapter = UsersListAdapter(this)
Pude remover o onAttach e economizar algumas linhas.

import androidx.recyclerview.widget.DiffUtil
import br.com.renatoarg.model.pojo.User

class UsersDiffUtilCallback : DiffUtil.ItemCallback<User>() {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este callback é especializado para o UsersListAdapter e só consegue diferenciar Users.

Porque ter um arquivo separado para essa classe? Eu penso que é melhor ter apenas o arquivo do UsersListAdapter e o UsersDiffUtilCallback declarado dentro dela.

Copy link
Owner

@renatoarg renatoarg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta implementação é realmente muito boa.

@renatoarg renatoarg requested a review from pedrex1987 May 26, 2020 20:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants