0

RecylerView 103: remova itens com swipe

Francisco Rasia
Francisco Rasia

Sabe aquele movimento de deletar um email com um toque rápido para a esquerda? Esse é o famoso swipe, uma das maneiras de se interagir com os elementos na tela do Android. Nesse artigo, vamos ver uma maneira simples de se implementar esse comportamento, usando o movimento de swipe para apagar itens de uma lista.

Esse é o terceiro de uma série de artigos em que eu exploro os comportamentos e interações com uma RecyclerView.


🐱 O Pulo do gato

Para implementar comportamentos de swipe e drag (arrastar um item) vamos nos valer uma classe utilitária ItemTouchHelper e seus callbacks.

1. Criar um ItemTouchHelper.SimpleCallback

Dentro do método onCreate() da Activity, declarar um swipeHandler que herda de uma ItemTouchHelper.SimpleCallback usando uma object declaration:


val swipeHandler = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START or ItemTouchHelper.END) {
 //...
}


Indicar as direções de swipe usando as constantes da classe ItemTouchHelper (nesse caso, usei os movimentos horizontais para START e END).


2. Sobrescrever os métodos do ItemTouchHelper.SimpleCallback

O método onMove() lida com os comportamentos de clicar e arrastar os itens da lista, enquanto o onSwipe() se refere aos movimentos de swipe.


val swipeHandler = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.START or ItemTouchHelper.END) {
 override fun onMove(
 recyclerView: RecyclerView,
 viewHolder: RecyclerView.ViewHolder,
 target: RecyclerView.ViewHolder
 ): Boolean {
 return false //não queremos fazer nada com o onMove
 }
​
 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
 adapter.removeAt(viewHolder.adapterPosition) //remove o item
 }
​
}


3. Vincular o ItemTouchHelper ao RecyclerView

Instanciar um objeto ItemTouchHelper, que recebe o swipeHandler como parâmetro, e vinculá-lo ao RecyclerView:


val itemTouchHelper = ItemTouchHelper(swipeHandler)
itemTouchHelper.attachToRecyclerView(rvList)


4. Implementar o método de remoção de item no Adapter

Criar um método de remover item a partir da posição e chamar o notifyItemRemoved() para atualizar a lista e animar a remoção do item:


 fun removeAt(position: Int) {
  lista.removeAt(position)
  notifyItemRemoved(position)
 }


Parabéns! Agora sua RecyclerView já está mais dinâmica e interativa.


🚀 Um exemplo prático

Vou utilizar como exemplo o projeto inspirado pelo módulo Conceitos de Navegação, Aparência e Estilo de Aplicativos Android (instrutor Igor Ferrani) no everis Kotlin Bootcamp aqui da DIO.

Você pode baixar o projeto no meu repositório ou seguir o passo-a-passo em qualquer projeto seu que empregue RecyclerView.


💻 Repositório no github: https://github.com/chicorasia/bootcamp-lista-tarefas

Use o commit 3391b9c e a branch recyclerview .


Confira o passo-a-passo no vídeo: 💊 RecyclerView: use swipe para remover itens no Android com Kotlin https://youtu.be/g6C2XSzhwNc



🏆 Conclusão

Nesse artigo nós vimos como usar a classe utilitária ItemTouchHelper para criar o comportamento de remover um item da RecyclerView com o movimento de swipe.

Essa foi uma implementação mínima, que pode ser aprimorada com melhores efeitos visuais, por exemplo, trocando a cor do fundo, adicionando a confirmação antes de apagar o item, etc.

No próximo artigo, vamos expandir o uso do ItemTouchHelper criando o comportamento de reordenar os itens da lista arrastando-os para cima ou para baixo.


📸

undraw.co

0
0

Comentários (0)

Arquiteto, urbanista, desenvolvedor Java & Android e criador em chefe na chicorialabs.com.br

Brasil