Personalizar uma lista dinâmica Parte do Android Jetpack.
Você pode personalizar
RecyclerView
objetos para atender às suas necessidades específicas. As classes padrão descritas em
Criar listas dinâmicas com
o 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
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. A reciclagem de visualizações dessa forma melhora
o desempenho, evitando a criação de visualizações desnecessárias ou a execuçã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 umRecyclerViewcomLinearLayoutManageroferece funcionalidades como umListViewlayout.GridLayoutManager: organiza os itens em uma grade bidimensional, como os quadrados em um quadriculado. O uso de umRecyclerViewcomGridLayoutManageroferece funcionalidades como umGridViewlayout.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, você poderá criar um gerenciador próprio, estendendo a
classe
RecyclerView.LayoutManager
abstrata.
Adicionar animações de itens
Sempre que um item muda, 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, você pode
definir seu próprio objeto animador estendendo
RecyclerView.ItemAnimator.
Ativar a seleção de itens de lista
A
recyclerview-selection
biblioteca 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 são qualificados para seleção e quantos itens podem
ser selecionados.
Para adicionar suporte à seleção a uma RecyclerView instância, siga
estas etapas:
- Determine qual tipo de chave de seleção usar e crie um
ItemKeyProvider.Há três tipos de chave que você pode usar para identificar itens selecionados:
Parcelablee subclasses, comoUriStringLong
Para informações detalhadas sobre os tipos de chave de seleção, consulte
SelectionTracker.Builder. - Implement
ItemDetailsLookup. - Atualize os objetos
Viewdo item emRecyclerViewpara 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 objetoViewcomtrueoufalse, dependendo se o item está selecionado. - Atualize o estilo da visualização para representar o status ativado. Recomendamos que você use um recurso de lista de estados de cor para configurar o estilo.
- Em
- Use
ActionModepara fornecer ao usuário ferramentas para realizar uma ação na seleção. - Realize todas as ações secundárias interpretadas.
- Reúna tudo com
SelectionTracker.Builder. - Inclua a seleção nos eventos de ciclo de vida da atividade.
ItemDetailsLookup permite que a biblioteca de seleção acesse informações sobre itens RecyclerView usando um MotionEvent.
É efetivamente uma fábrica de
ItemDetails
instâncias que são apoiadas ou extraídas de uma
RecyclerView.ViewHolder
instância.
Registre um
SelectionTracker.SelectionObserver
para ser notificado quando uma seleção mudar. Quando uma seleção é criada pela primeira vez,
inicie ActionMode para apresentá-la ao usuário e fornecer
ações específicas de seleção. Por exemplo, você pode adicionar um botão de exclusão à
ActionMode barra e conectar a seta para trás na barra para limpar
a seleção. Quando a seleção fica vazia, se o usuário limpar a
seleção da ú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
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 a seguir mostra como reunir 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
SelectionTracker
instância, seu app precisa fornecer o mesmo
RecyclerView.Adapter
que você usa para inicializar RecyclerView para
SelectionTracker.Builder. Por esse motivo, depois de criar a
SelectionTracker instância, injete-a no
RecyclerView.Adapter. Caso contrário, não será possível verificar o status selecionado de um item no
método onBindViewHolder().
Para preservar o estado de seleção em todos os eventos de 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
SelectionTracker.Builder construtor. Esse ID é obrigató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, que usa
RecyclerView. - Usar o codelab RecyclerView para mostrar uma lista de rolagem.
- Conceitos básicos do Kotlin para Android: codelab de conceitos básicos do RecyclerView.