Personalizzare un elenco dinamico   Componente di Android Jetpack.

Prova la funzionalità Scrivi
Jetpack Compose è il toolkit per l'interfaccia utente consigliato per Android. Scopri come utilizzare i layout in Compose.

Puoi personalizzare RecyclerView gli oggetti in base alle tue esigenze specifiche. Le classi standard descritte in Creare elenchi dinamici con RecyclerView forniscono tutte le funzionalità di cui la maggior parte degli sviluppatori ha bisogno. In molti casi, devi solo progettare la visualizzazione per ogni visualizzatore e scrivere il codice per aggiornare le visualizzazioni con i dati appropriati. Tuttavia, se la tua app ha requisiti specifici, puoi modificare il comportamento standard in diversi modi. Questo documento descrive alcune delle possibili personalizzazioni.

Modificare il layout

RecyclerView utilizza un gestore del layout per posizionare i singoli elementi sullo schermo e per determinare quando riutilizzare le visualizzazioni degli elementi che non sono più visibili all'utente. Per riutilizzare (o riciclare) una vista, un gestore del layout potrebbe chiedere all'adattatore di sostituire i contenuti della vista con un elemento diverso dal set di dati. Il riciclo delle viste in questo modo migliora il rendimento evitando la creazione di viste non necessarie o l'esecuzione di ricerche findViewById()costose. La libreria di supporto Android include tre gestori di layout standard, ciascuno dei quali offre molte opzioni di personalizzazione:

  • LinearLayoutManager: ordina gli elementi in un elenco unidimensionale. L'utilizzo di un RecyclerView con LinearLayoutManager offre funzionalità simili a un layout ListView.
  • GridLayoutManager: dispone gli elementi in una griglia bidimensionale, come i quadrati su una scacchiera. L'utilizzo di un elemento RecyclerView con GridLayoutManager offre funzionalità come un layout GridView.
  • StaggeredGridLayoutManager: dispone gli elementi in una griglia bidimensionale, con ogni colonna leggermente offset rispetto alla precedente, come le stelle su una bandiera americana.

Se questi gestori del layout non soddisfano le tue esigenze, puoi crearne uno personalizzato estendendo la classe astrattaRecyclerView.LayoutManager.

Aggiungere animazioni degli articoli

Ogni volta che un elemento cambia, RecyclerView utilizza un animatore per modificarne l'aspetto. Questo animator è un oggetto che estende la classe astratta RecyclerView.ItemAnimator. Per impostazione predefinita, l'RecyclerView utilizza DefaultItemAnimator per fornire l'animazione. Se vuoi fornire animazioni personalizzate, puoi definire il tuo oggetto animator estendendo RecyclerView.ItemAnimator.

Attivare la selezione degli elementi dell'elenco

La libreria recyclerview-selection consente agli utenti di selezionare gli elementi in un elenco RecyclerView utilizzando il tocco o l'input del mouse. In questo modo puoi mantenere il controllo sulla presentazione visiva di un elemento selezionato. Puoi anche mantenere il controllo sui criteri che regolano il comportamento di selezione, ad esempio quali elementi sono idonei per la selezione e quanti elementi possono essere selezionati.

Per aggiungere il supporto per la selezione a un'istanza RecyclerView, segui questi passaggi:

  1. Determina quale tipo di chiave di selezione utilizzare, quindi crea una ItemKeyProvider.

    Esistono tre tipi di chiavi che puoi utilizzare per identificare gli elementi selezionati:

    Per informazioni dettagliate sui tipi di chiavi di selezione, consulta SelectionTracker.Builder.

  2. Implementa ItemDetailsLookup.
  3. ItemDetailsLookup consente alla raccolta di selezione di accedere alle informazioni sugli elementi RecyclerView in base a un MotionEvent. Si tratta in pratica di una fabbrica per le istanze ItemDetails di cui viene eseguito il backup o che vengono estratte da un'istanza RecyclerView.ViewHolder.

  4. Aggiorna gli oggetti View elemento in RecyclerView in base al fatto che l'utente li selezioni o meno.

    La raccolta di selezione non fornisce una decorazione visiva predefinita per gli elementi selezionati. Fornisci questo campo al momento dell'implementazione di onBindViewHolder(). Consigliamo il seguente approccio:

    • In onBindViewHolder(), chiama setActivated(), non setSelected(), sull'oggetto View con true o false, a seconda che l'elemento sia selezionato.
    • Aggiorna lo stile della vista per rappresentare lo stato attivato. Ti consigliamo di utilizzare una risorsa elenco stato colore per configurare lo stile.
  5. Utilizza ActionMode per fornire all'utente gli strumenti per eseguire un'azione sulla selezione.
  6. Registra un SelectionTracker.SelectionObserver per ricevere una notifica quando una selezione cambia. Quando una selezione viene creata per la prima volta, avvia ActionMode per presentarla all'utente e eseguire azioni specifiche per la selezione. Ad esempio, puoi aggiungere un pulsante di eliminazione alla barra ActionMode e collegare la freccia Indietro sulla barra per annullare la selezione. Quando la selezione diventa vuota, se l'utente la cancella l'ultima volta, termina la modalità di azione.

  7. Esegui eventuali azioni secondarie interpretate.
  8. Al termine della pipeline di elaborazione degli eventi, la libreria potrebbe determinare che l'utente sta tentando di attivare un elemento toccandolo o sta tentando di trascinare un elemento o un insieme di elementi selezionati. Reagire a queste interpretazioni registrando l'ascoltatore appropriato. Per maggiori informazioni, consulta SelectionTracker.Builder.

  9. Assembla tutto con SelectionTracker.Builder.
  10. L'esempio seguente mostra come assemblare questi elementi:

    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();
        

    Per creare un'istanza di SelectionTracker, la tua app deve fornire lo stesso RecyclerView.Adapter utilizzato per inizializzare RecyclerView a SelectionTracker.Builder. Per questo motivo, dopo aver creato l'istanza SelectionTracker, inseriscila in RecyclerView.Adapter. In caso contrario, non puoi controllare lo stato selezionato di un elemento dal metodo onBindViewHolder().

  11. Includi la selezione negli eventi del ciclo di vita dell'attività.
  12. Per conservare lo stato di selezione negli eventi del ciclo di vita dell'attività, la tua app deve chiamare i metodi onSaveInstanceState() e onRestoreInstanceState() del tracker delle selezioni dai metodi onSaveInstanceState() e onRestoreInstanceState() dell'attività, rispettivamente. L'app deve anche fornire un ID selezione univoco al costruttore SelectionTracker.Builder. Questo ID è obbligatorio perché un'attività o un frammento potrebbero avere più di un elenco distinto selezionabile, che dovrà essere mantenuto nello stato salvato.

Risorse aggiuntive

Per ulteriori informazioni, consulta i riferimenti riportati di seguito.