Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Personalização avançada do RecyclerView   Parte do Android Jetpack.

Você pode personalizar os objetos RecyclerView para atender às suas necessidades específicas. As classes padrão descritas na seção Criar listas dinâmicas com o RecyclerView fornecem toda a funcionalidade que a maioria dos desenvolvedores precisa. E em muitos casos, a única personalização que você precisa fazer é projetar a visualização para cada fixador de visualização e criar o código para atualizar essas visualizações com os dados apropriados. No entanto, se seu app tiver requisitos específicos, você poderá modificar o comportamento padrão de várias maneiras. Esta página descreve algumas das outras possibilidades de personalizações.

Como 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() 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:

Se nenhum desses gerenciadores de layout atende à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 alterar 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 na lista RecyclerView usando a entrada por toque ou mouse. Você mantém 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, itens que podem ser qualificados para seleção e quantos itens podem ser selecionados.

Para adicionar suporte de seleção a uma instância do RecyclerView, siga estas etapas:

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

    Você pode usar três tipos de chave para identificar itens selecionados: Parcelable (e todas as subclasses, como Uri), String e Long. Para ver 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 por (ou extraídas de) uma instância de RecyclerView.ViewHolder.

  4. Atualize o item Views em RecyclerView para indicar que ele foi selecionado ou desmarcado pelo usuário.

    A biblioteca de seleção não fornece uma decoração visual padrão para os itens selecionados. Você precisa fornecer isso quando implementar onBindViewHolder(). A abordagem recomendada é a seguinte:

  5. Use ActionMode para fornecer ao usuário ferramentas para executar uma ação na seleção.
  6. Registre um SelectionTracker.SelectionObserver para ser notificado quando a seleção mudar. Quando uma seleção for criada pela primeira vez, inicie ActionMode para representar isso para o 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), não se esqueça de encerrar o modo de ação.

  7. Realizar 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 e soltar um item ou conjunto de itens selecionados. Reaja a essas interpretações registrando o listener apropriado. Para mais informações, consulte: SelectionTracker.Builder.

  9. Montar tudo com SelectionTracker.Builder
  10. O exemplo a seguir mostra como juntar essas partes usando a tecla de seleção Long:

    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ê usou para inicializar RecyclerView para SelectionTracker.Builder. Por esse motivo, você provavelmente precisará injetar a instância de SelectionTracker, uma vez criada, no seu RecyclerView.Adapter depois que RecyclerView.Adapter for criado. Caso contrário, você não poderá verificar o status selecionado de um item com o método onBindViewHolder().

  11. Inclua 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 é 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

    RecyclerView é usado no app de demonstração Sunflower (link em inglês).