Personalizzare un elenco dinamico   Parte di Android Jetpack.

Prova il modo di comporre
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come utilizzare i layout in Crea.

Puoi personalizzare RecyclerView gli oggetti per soddisfare le 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 segnaposto della visualizzazione e scrivere il codice per aggiornare queste 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 personalizzazioni possibili.

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 del set di dati. Il riutilizzo delle viste in questo modo migliora le prestazioni evitando la creazione di viste non necessarie o l'esecuzione di costose findViewById() ricerche. La libreria di supporto Android include tre gestori di layout standard, ognuno dei quali offre molte opzioni di personalizzazione:

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

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

Aggiungere animazioni agli elementi

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

Attiva la selezione degli elementi dell'elenco

La libreria recyclerview-selection consente agli utenti di selezionare elementi in un elenco RecyclerView utilizzando l'input tocco o mouse. In questo modo, puoi mantenere il controllo sulla presentazione visiva di un elemento selezionato. Puoi anche mantenere il controllo sulle norme 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 della selezione a un'istanza di RecyclerView, segui questi passaggi:

  1. Determina il tipo di chiave di selezione da utilizzare, quindi crea un ItemKeyProvider.

    Esistono tre tipi principali 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 sugli elementi RecyclerView dato un MotionEvent. È a tutti gli effetti una fabbrica di istanze ItemDetails di cui è stato eseguito il backup o che sono state estratte da un'istanza RecyclerView.ViewHolder.

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

    La libreria di selezione non fornisce una decorazione visiva predefinita per gli elementi selezionati. Fornisci questo valore quando implementi onBindViewHolder(). Ti consigliamo di procedere come segue:

    • In onBindViewHolder(), chiama setActivated()non setSelected()—su l'oggetto View con true o false, a seconda che l'elemento sia selezionato.
    • Aggiorna lo stile della visualizzazione in modo che rappresenti lo stato attivato. Ti consigliamo di utilizzare una risorsa elenco di stati di 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 viene creata una selezione, avvia ActionMode per presentarla all'utente e fornire azioni specifiche per la selezione. Ad esempio, puoi aggiungere un pulsante di eliminazione 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, termina la modalità di azione.

  7. Esegui eventuali azioni secondarie interpretate.
  8. Alla fine della pipeline di elaborazione degli eventi, la libreria potrebbe determinare che l'utente sta tentando di attivare un elemento toccandolo o di trascinare un elemento o un insieme di elementi selezionati. Reagisci a queste interpretazioni registrando il listener appropriato. Per ulteriori informazioni, vedi SelectionTracker.Builder.

  9. Assembla tutto con SelectionTracker.Builder.
  10. Il seguente esempio mostra come mettere insieme 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 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 conservare lo stato di selezione durante gli eventi del ciclo di vita dell'attività, la tua app deve chiamare i metodi onSaveInstanceState() e onRestoreInstanceState() del tracker di selezione dai metodi onSaveInstanceState() e onRestoreInstanceState() dell'attività, rispettivamente. La tua app deve fornire anche un ID selezione univoco al costruttore SelectionTracker.Builder. Questo ID è necessario perché un'attività o un frammento potrebbe avere più di un elenco distinto e selezionabile, che devono essere tutti mantenuti nel loro stato salvato.

Risorse aggiuntive

Per ulteriori informazioni, consulta i seguenti riferimenti.