Personalizzare un elenco dinamico Componente di Android Jetpack.

Prova il metodo Scrivi
Jetpack Compose è il toolkit consigliato per la UI per Android. Scopri come utilizzare i layout in Compose.

Puoi personalizzare gli oggetti RecyclerView per soddisfare le tue esigenze specifiche. Le classi standard descritte in Creare elenchi dinamici con RecyclerView forniscono tutte le funzionalità necessarie alla maggior parte degli sviluppatori. In molti casi, devi solo progettare la vista per ogni titolare della vista e scrivere il codice per aggiornare queste viste 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 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. Riciclare le visualizzazioni in questo modo migliora le prestazioni evitando la creazione di viste non necessarie o l'esecuzione di ricerche findViewById() costose. Android Support Library include tre gestori di layout standard, che offrono molte opzioni di personalizzazione:

  • LinearLayoutManager: dispone gli elementi in un elenco unidimensionale. L'utilizzo di un RecyclerView con LinearLayoutManager offre funzionalità come 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 sfalsata rispetto a quella precedente, come le stelle su una bandiera americana.

Se questi gestori di layout non soddisfano le tue esigenze, puoi crearne di personalizzati estendendo la classe RecyclerView.LayoutManager astratta.

Aggiungi animazioni degli elementi

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

Abilita selezione di voci 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 controllano 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 libreria di selezione di accedere alle informazioni su RecyclerView elementi a cui è stato assegnato un MotionEvent. È effettivamente una fabbrica per le istanze di ItemDetails di cui è stato eseguito il backup o da un'istanza RecyclerView.ViewHolder.

  4. Aggiorna gli oggetti View dell'elemento in RecyclerView per riflettere se l'utente li seleziona o deseleziona.

    La libreria 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 di stati dei colori 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 notifiche quando una selezione cambia. Quando viene creata una selezione per la prima volta, avvia ActionMode per presentarla all'utente e eseguire azioni specifiche per la selezione. Ad esempio, puoi aggiungere un pulsante Elimina alla barra ActionMode e collegare la Freccia indietro sulla barra per cancellare la selezione. Quando la selezione diventa vuota (se l'utente cancella la selezione l'ultima volta), la modalità di azione viene terminata.

  7. Eseguire qualsiasi azione secondaria interpretata.
  8. Al termine della pipeline di elaborazione degli eventi, la libreria potrebbe determinare se l'utente sta tentando di attivare un elemento toccandolo oppure sta tentando di trascinare un elemento o un insieme di elementi selezionati. Reagisci a queste interpretazioni registrando il listener appropriato. Per maggiori informazioni, consulta SelectionTracker.Builder.

  9. Monta 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 SelectionTracker, l'app deve fornire lo stesso RecyclerView.Adapter che utilizzi per inizializzare RecyclerView in 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 mantenere lo stato di selezione durante gli eventi del ciclo di vita dell'attività, l'app deve chiamare i metodi onSaveInstanceState() e onRestoreInstanceState() del tracker di selezione dai metodi onSaveInstanceState() e onRestoreInstanceState() dell'attività, rispettivamente. L'app deve inoltre 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.