Personalizzare un elenco dinamico Parte di Android Jetpack.
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 unRecyclerView
conLinearLayoutManager
fornisce funzionalità come un layoutListView
.GridLayoutManager
: dispone gli elementi in una griglia bidimensionale, come i quadrati di una scacchiera. L'utilizzo di unRecyclerView
conGridLayoutManager
fornisce funzionalità simili a un layoutGridView
.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:
- 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:
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
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()
, chiamasetActivated()
—nonsetSelected()
—su l'oggettoView
contrue
ofalse
, 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.
- In
- Utilizza
ActionMode
per fornire all'utente gli strumenti per eseguire un'azione sulla selezione. - Esegui eventuali azioni secondarie interpretate.
- Assembla 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 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
.
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.
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
.
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()
.
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.
- App demo Sunflower, che utilizza
RecyclerView
. - Utilizza RecyclerView per visualizzare un elenco scorrevole codelab.
- Codelab Android Kotlin Fundamentals: RecyclerView fundamentals.