Personalizar uma lista dinâmica   Parte do Android Jetpack.

Testar o Compose
O Jetpack Compose é o kit de ferramentas de interface recomendado para Android. Aprenda a trabalhar com layouts no Compose.

Você pode personalizar objetos RecyclerView 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 titular de visualização 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 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, que oferecem muitas opções de personalização:

  • LinearLayoutManager: organiza os itens em uma lista unidimensional. O uso de um RecyclerView com LinearLayoutManager fornece funcionalidades como um layout ListView.
  • GridLayoutManager: organiza os itens em uma grade bidimensional, como os quadrados em um tabuleiro. O uso de um RecyclerView com GridLayoutManager fornece funcionalidades como um layout GridView.
  • StaggeredGridLayoutManager: organiza os itens em uma grade bidimensional, com cada coluna um pouco deslocada da anterior, como as estrelas em uma bandeira americana.

Se esses gerenciadores de layout não atenderem às suas necessidades, você pode 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. Para fornecer animações personalizadas, defina um objeto animador próprio, 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 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:

  1. Determine qual tipo de chave de seleção usar e crie um ItemKeyProvider.

    Há três tipos principais que podem ser usados para identificar itens selecionados:

    Para informações detalhadas sobre os tipos de chave de seleção, consulte SelectionTracker.Builder.

  2. Implemente ItemDetailsLookup.
  3. 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 ou extraídas de uma instância de RecyclerView.ViewHolder.

  4. Atualize os objetos View do item no RecyclerView para indicar 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 quando implementar onBindViewHolder(). Recomendamos a seguinte abordagem:

    • Em onBindViewHolder(), chame setActivated(), não setSelected(), no objeto View com true ou false, 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.
  5. Use ActionMode para fornecer ao usuário ferramentas para executar uma ação na seleção.
  6. 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 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 limpar a seleção pela última vez), encerre o modo de ação.

  7. Realize ações secundárias interpretadas.
  8. 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.

  9. Monte tudo com SelectionTracker.Builder.
  10. 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, o app precisa fornecer o mesmo RecyclerView.Adapter usado para inicializar RecyclerView para SelectionTracker.Builder. Por esse motivo, depois de criar a instância de 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().

  11. Inclua a seleção nos eventos de ciclo de vida da atividade.
  12. 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 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.