Personalizar uma lista dinâmica Parte do Android Jetpack.
É possível personalizar os objetos
RecyclerView
para atender às suas necessidades específicas. As classes padrão descritas em
Criar listas dinâmicas com o
RecyclerView oferecem todas as funcionalidades que a maioria dos desenvolvedores precisa. Em
muitos casos, você só precisa projetar a visualização para cada armazenador 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, será possível modificar o comportamento padrão de várias maneiras.
Este documento descreve algumas das personalizações possíveis.
Modificar o layout
A RecyclerView usa um gerenciador de layout para posicionar os itens
individuais na tela e determinar quando reutilizar as 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 que o adaptador substitua o conteúdo da visualização por um
elemento diferente do conjunto de dados. A reciclagem de visualizações dessa maneira melhora
o desempenho, evitando a criação de visualizações desnecessárias ou a realização de pesquisas
findViewById()
dispendiosas. A Biblioteca de Suporte do Android inclui três gerenciadores de layout padrão,
cada um com muitas opções de personalização:
LinearLayoutManager: organiza os itens em uma lista unidimensional. O uso de umRecyclerViewcomLinearLayoutManageroferece uma funcionalidade semelhante a um layoutListView.GridLayoutManager: organiza os itens em uma grade bidimensional, como os quadrados em um tabuleiro de xadrez. Usar umRecyclerViewcomGridLayoutManageroferece uma funcionalidade semelhante a um layoutGridView.StaggeredGridLayoutManager: organiza os itens em uma grade bidimensional, com cada coluna ligeiramente deslocada da anterior, como 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 mudar 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. Se você quiser fornecer animações personalizadas, defina seu próprio objeto de animação 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 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 estão qualificados para seleção e quantos itens 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.Há três tipos de chaves que podem ser usados para identificar os itens selecionados:
Parcelablee as subclasses dela, comoUriStringLong
Para informações detalhadas sobre os tipos de chave de seleção, consulte
SelectionTracker.Builder. - Implemente
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 usar um recurso de lista de estados de cores para configurar o estilo.
- Em
- Use
ActionModepara fornecer ao usuário ferramentas para realizar uma ação na seleção. - Realizar ações secundárias interpretadas.
- Monte tudo com
SelectionTracker.Builder. - Inclua a seleção nos eventos do ciclo de vida da atividade.
ItemDetailsLookup permite que a biblioteca de seleção acesse
informações sobre itens RecyclerView de acordo com um
MotionEvent.
É 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 é criada,
inicie o ActionMode para apresentá-la ao usuário e fornecer
ações específicas da seleção. Por exemplo, é possível adicionar um botão de exclusão à
barra ActionMode e conectar a seta de voltar na barra para limpar
a seleção. Quando a seleção ficar vazia, se o usuário limpar 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
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 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, o app precisa fornecer o mesmo
RecyclerView.Adapter
usado para inicializar RecyclerView para
SelectionTracker.Builder. Por esse motivo, depois de criar a
instância SelectionTracker, 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 nos eventos de ciclo de vida da atividade, o app
precisa chamar os métodos
onSaveInstanceState()
e
onRestoreInstanceState()
do rastreador de seleção nos métodos
onSaveInstanceState()
e
onRestoreInstanceState()
da atividade, respectivamente. O 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 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 a RecyclerView para mostrar uma lista rolável.
- Codelab Conceitos básicos do Kotlin para Android: conceitos básicos da RecyclerView.