Personalizar uma lista dinâmica Parte do Android Jetpack.
É possível personalizar
objetos RecyclerView
para atender às suas necessidades específicas. As classes padrão descritas em
Criar listas dinâmicas com a
RecyclerView oferecem todas as funcionalidades de que a maioria dos desenvolvedores precisa. Em
muitos casos, você só precisa projetar a visualização para cada armazenador e escrever o
código para atualizar essas visualizações com os dados apropriados. No entanto, caso seu app tenha
requisitos específicos, você pode modificar o comportamento padrão de várias maneiras.
Este documento descreve algumas das possíveis personalizações.
Modificar o layout
O RecyclerView
usa um gerenciador de layout para posicionar os itens
individuais na tela e determinar quando reutilizar visualizações de itens que não estão mais
visíveis para o usuário. Para reutilizar (ou reciclar) uma visualização, um gerenciador
de layout pode solicitar que o adaptador substitua o conteúdo da visualização por um
elemento diferente do conjunto de dados. Reciclar visualizações dessa maneira melhora
a performance, evitando a criação de visualizações desnecessárias ou a realização de
pesquisas
findViewById()
caras. A Biblioteca de Suporte do Android inclui três gerenciadores de layout padrão,
que oferecem muitas opções de personalização:
LinearLayoutManager
: organiza os itens em uma lista unidimensional. O uso de umRecyclerView
comLinearLayoutManager
fornece funcionalidades como um layoutListView
.GridLayoutManager
: organiza os itens em uma grade bidimensional, como os quadrados em um quadriculado. O uso de umRecyclerView
comGridLayoutManager
fornece funcionalidades como um layoutGridView
.StaggeredGridLayoutManager
: organiza os itens em uma grade bidimensional, com cada coluna um pouco deslocada da anterior, como as estrelas em uma bandeira americana.
Caso esses gerenciadores de layout não atendam às suas necessidades, você poderá criar um gerenciador próprio
estendendo a
classe abstrata
RecyclerView.LayoutManager
.
Adicionar animações de itens
Sempre que um item muda, o RecyclerView
usa um animador
para mudar a aparência dele. Esse animador é um objeto que estende a classe
RecyclerView.ItemAnimator
abstrata. Por padrão, o RecyclerView
usa
DefaultItemAnimator
para fornecer a animação. Se você quiser fornecer animações personalizadas, poderá
definir seu próprio objeto animador estendendo
RecyclerView.ItemAnimator
.
Ativar a seleção de itens de lista
A
biblioteca recyclerview-selection
permite que os usuários selecionem itens em uma lista RecyclerView
usando a entrada por toque
ou mouse. Isso permite que você mantenha o controle sobre a apresentação visual de um
item selecionado. Você também pode manter o controle sobre as políticas que controlam o comportamento
de seleção, como quais itens são qualificados para seleção e quantos podem
ser selecionados.
Para adicionar suporte à seleção a uma instância de RecyclerView
, siga
estas etapas:
- Determine qual tipo de chave de seleção usar e crie um
ItemKeyProvider
.Existem três tipos de chaves que você pode usar para identificar itens selecionados:
Parcelable
e as subclasses dela, comoUri
String
Long
Para informações detalhadas sobre os tipos de chave de seleção, consulte
SelectionTracker.Builder
. - Implemente
ItemDetailsLookup
. - Atualize os objetos
View
do item noRecyclerView
para refletir se o usuário os selecionou ou desmarcou.A biblioteca de seleção não oferece uma decoração visual padrão para os itens selecionados. Forneça isso ao implementar
onBindViewHolder()
. Recomendamos a seguinte abordagem:- Em
onBindViewHolder()
, chamesetActivated()
, nãosetSelected()
, no objetoView
comtrue
oufalse
, dependendo se o item está selecionado ou não. - Atualize o estilo da visualização para representar o status ativado. Recomendamos o uso de um recurso de lista de estados de cor para configurar o estilo.
- Em
- Use
ActionMode
para fornecer ao usuário ferramentas para executar uma ação na seleção. - Realizar qualquer ação secundária interpretada.
- Montar tudo com
SelectionTracker.Builder
. - Inclua seleção nos eventos de ciclo de vida da atividade.
ItemDetailsLookup
permite que a biblioteca de seleção acesse
informações sobre itens RecyclerView
que receberam um
MotionEvent
.
Ele é efetivamente uma fábrica para instâncias de
ItemDetails
que são armazenadas em backup ou extraídas de uma
instância de
RecyclerView.ViewHolder
.
Registre um
SelectionTracker.SelectionObserver
para receber uma notificação quando uma seleção mudar. Quando uma seleção for criada pela primeira vez, inicie ActionMode
para apresentar isso ao usuário e fornecer ações específicas da seleção. Por exemplo, você pode adicionar um botão "Excluir" à
barra ActionMode
e conectar a seta "Voltar" à barra para limpar
a seleção. Encerre o modo de ação quando a seleção ficar vazia (se o usuário limpar a
seleção pela última vez).
No final do pipeline de processamento de eventos, a biblioteca pode determinar
que o usuário está tentando ativar um item, tocando nele ou tentando
arrastar um item ou conjunto de itens selecionados. Reaja a essas
interpretações registrando o listener apropriado. Para mais
informações, consulte
SelectionTracker.Builder
.
O exemplo abaixo mostra como juntar essas peças:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Para criar uma instância de
SelectionTracker
, seu app precisa fornecer o mesmo
RecyclerView.Adapter
usado para inicializar RecyclerView
para
SelectionTracker.Builder
. Por esse motivo, depois de criar a
instância do SelectionTracker
, injete-a no
RecyclerView.Adapter
. Caso contrário, não será possível verificar o status selecionado de um item com o método onBindViewHolder()
.
Para preservar o estado da seleção nos eventos de ciclo de vida da atividade, seu app precisa chamar os métodos onSaveInstanceState()
e onRestoreInstanceState()
do rastreador de seleção nos métodos onSaveInstanceState()
e onRestoreInstanceState()
da atividade, respectivamente. Seu app também precisa fornecer um ID de seleção exclusivo para o
construtor SelectionTracker.Builder
. Esse ID é necessário porque uma atividade ou um fragmento pode ter mais de uma lista distinta e selecionável, e todos precisam ser mantidos no estado salvo.
Outros recursos
Consulte as referências a seguir para mais informações.
- App de demonstração
Sunflower (em inglês), que usa
RecyclerView
. - Use a RecyclerView para mostrar uma lista rolável.
- Codelab Conceitos básicos do Kotlin para Android: conceitos básicos da RecyclerView.