Personalizzare un elenco dinamico Componente di Android Jetpack.
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 unRecyclerView
conLinearLayoutManager
offre funzionalità come un layoutListView
.GridLayoutManager
: dispone gli elementi in una griglia bidimensionale, come i quadrati su una scacchiera. L'utilizzo di un elementoRecyclerView
conGridLayoutManager
offre funzionalità come un layoutGridView
.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:
- 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:
Parcelable
e le relative sottoclassi, ad esempioUri
String
Long
Per informazioni dettagliate sui tipi di chiavi di selezione, consulta
SelectionTracker.Builder
. - Implementa
ItemDetailsLookup
. - Aggiorna gli oggetti
View
dell'elemento inRecyclerView
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()
, chiamasetActivated()
(nonsetSelected()
) sull'oggettoView
contrue
ofalse
, 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.
- In
- Utilizza
ActionMode
per fornire all'utente gli strumenti per eseguire un'azione sulla selezione. - Eseguire qualsiasi azione secondaria interpretata.
- Monta tutto con
SelectionTracker.Builder
. - Includi la selezione negli eventi del ciclo di vita dell'attività.
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
.
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.
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
.
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()
.
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.
- App demo
Sunflower che utilizza
RecyclerView
. - Utilizza RecyclerView per visualizzare un elenco scorrevole.
- Codelab su Android Kotlin Fundamentals: RecyclerView Fundamentals.