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 RecyclerView fornecem toda a funcionalidade que a maioria dos desenvolvedores precisa. Em muitos casos, você só precisa projetar a visualização para cada fixador de visualização e escrever o código para atualizar essas visualizações com os dados apropriados. No entanto, se o app tiver requisitos específicos, você poderá modificar o comportamento padrão de várias maneiras. Este documento descreve algumas das personalizações possíveis.
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 pedir ao adaptador para substituir o conteúdo da visualização por um elemento diferente do conjunto de dados. Reciclar visualizações dessa maneira melhora o desempenho, 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, e cada um deles oferece muitas opções de personalização:
LinearLayoutManager
: organiza os itens em uma lista unidimensional. O uso de umRecyclerView
comLinearLayoutManager
fornece funcionalidade 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 diferente da anterior, por exemplo, as estrelas em uma bandeira americana.
Se esses gerenciadores de layout não atenderem às suas necessidades, crie um estendendo a classe abstrata RecyclerView.LayoutManager
.
Adicionar animações de itens
Sempre que um item muda, o RecyclerView
usa um animador para alterar a aparência dele. Esse animador é um objeto que estende a classe abstrata RecyclerView.ItemAnimator
. Por padrão, o RecyclerView
usa DefaultItemAnimator
para fornecer a animação. Para fornecer animações personalizadas, defina 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, por exemplo, quais itens podem ser selecionados e quantos itens podem ser selecionados.
Para adicionar suporte de seleção a uma instância do RecyclerView
, siga estas etapas:
- Determine qual tipo de chave de seleção usar e crie um
ItemKeyProvider
.Há três tipos principais que você pode usar para identificar itens selecionados:
Parcelable
e as subclasses, comoUri
String
Long
Para informações detalhadas sobre os tipos de chave de seleção, consulte
SelectionTracker.Builder
. - Implemente
ItemDetailsLookup
. - Atualize os objetos do item
View
noRecyclerView
para refletir se o usuário os seleciona ou desmarca.A biblioteca de seleção não fornece 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 de o item estar selecionado. - Atualize o estilo da visualização para representar o status ativado. Recomendamos usar 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 ações secundárias interpretadas.
- Monte 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 MotionEvent
. Ele é efetivamente uma fábrica para instâncias de ItemDetails
que são armazenadas em backup por 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 forneça ações específicas para a seleção. Por exemplo, você pode adicionar um botão "Excluir" à barra ActionMode
e conectar a seta "Voltar" à barra para limpar a seleção. Quando a seleção ficar vazia (se o usuário limpou a seleção pela última vez), encerre o modo de ação.
No final do pipeline de processamento de eventos, a biblioteca pode determinar que o usuário está tentando ativar um item tocando nele ou arrastando 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 a seguir mostra como juntar essas partes:
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
que você usa para inicializar RecyclerView
para SelectionTracker.Builder
. Por isso, depois de criar a instância SelectionTracker
, injete-a no seu 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 de seleção em todos os eventos do ciclo de vida da atividade, seu app precisa chamar os métodos onSaveInstanceState()
e onRestoreInstanceState()
do rastreador de seleção dos 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 é obrigatório porque uma atividade ou um fragmento pode ter mais de uma lista distinta e selecionável, e todas precisam ser mantidas no estado salvo.
Outros recursos
Consulte as referências a seguir para mais informações.
- App de demonstração Sunflower, que usa
RecyclerView
. - Codelab Usar RecyclerView para mostrar uma lista de rolagem.
- Codelab Conceitos básicos do Kotlin para Android: fundamentos da RecyclerView.