Personalizza un elenco dinamico Parte di Android Jetpack.
Puoi personalizzare
RecyclerView
gli oggetti in base alle tue esigenze specifiche. Le classi standard descritte nella sezione Creare elenchi dinamici con RecyclerView forniscono tutte le funzionalità di cui la maggior parte degli sviluppatori ha bisogno. In molti casi, è sufficiente progettare la vista per ciascun titolare e scrivere il codice per aggiornarle 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 di layout per posizionare i singoli elementi sullo schermo e per stabilire 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 riciclo delle visualizzazioni in questo modo migliora le prestazioni evitando la creazione di visualizzazioni superflue o l'esecuzione di ricerchefindViewById()
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 diRecyclerView
conLinearLayoutManager
fornisce funzionalità come un layoutListView
.GridLayoutManager
: dispone gli elementi in una griglia bidimensionale, come i quadrati su una scacchiera. L'utilizzo diRecyclerView
conGridLayoutManager
fornisce 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 del layout non soddisfano le tue esigenze, puoi crearne uno personalizzato estendendo la classe astratta RecyclerView.LayoutManager
.
Aggiungi animazioni degli elementi
Ogni volta che un elemento viene modificato, RecyclerView
utilizza un animatore per modificarne l'aspetto. Questo animatore è un oggetto che estende la classe RecyclerView.ItemAnimator
astratta. 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 di voci dall'elenco
La libreria recyclerview-selection
consente agli utenti di selezionare gli elementi in un elenco RecyclerView
utilizzando l'input del tocco o 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 della selezione, ad esempio quali elementi sono idonei per la selezione e quanti possono essere selezionati.
Per aggiungere il supporto della selezione a un'istanza RecyclerView
, segui questi passaggi:
- Determina il tipo di chiave di selezione da utilizzare, quindi crea una
ItemKeyProvider
.Esistono tre tipi di chiavi che puoi utilizzare per identificare gli elementi selezionati:
Parcelable
e le sue sottoclassi, comeUri
String
Long
Per informazioni dettagliate sui tipi di chiavi di selezione, consulta
SelectionTracker.Builder
. - Implementa
ItemDetailsLookup
. - Aggiorna gli oggetti
View
degli elementi inRecyclerView
per indicare se l'utente li seleziona o deseleziona.La libreria di selezione non fornisce una decorazione visiva predefinita per gli elementi selezionati. Forniscilo quando implementi
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 per l'elenco degli stati dei colori per configurare lo stile.
- In
- Utilizza
ActionMode
per fornire all'utente gli strumenti per eseguire un'azione sulla selezione. - Eseguire eventuali azioni secondarie interpretate.
- Assembla tutto con
SelectionTracker.Builder
. - Includi la selezione negli eventi del ciclo di vita delle attività.
ItemDetailsLookup
consente alla libreria di selezione di accedere alle informazioni sugli elementi RecyclerView
a cui è stato assegnato un valore MotionEvent
.
Si tratta effettivamente di una fabbrica per le istanze
ItemDetails
sottoposte a backup o estratte da
un'istanza
RecyclerView.ViewHolder
.
Registra un SelectionTracker.SelectionObserver
per ricevere una notifica quando una selezione cambia. Quando una selezione viene creata per la prima volta,
avvia ActionMode
per presentare questa richiesta all'utente e fornire
azioni specifiche per la selezione. Ad esempio, puoi aggiungere un pulsante Elimina alla barra
ActionMode
e collegare la Freccia indietro sulla barra per annullare
la selezione. Quando la selezione diventa vuota, se l'utente cancella la selezione l'ultima volta, termina la modalità azione.
Al termine della pipeline di elaborazione degli eventi, la libreria potrebbe determinare che l'utente sta tentando di attivare un elemento toccandolo o che sta tentando di trascinare un elemento o l'insieme di elementi selezionati. Reagisci a queste
interpretazioni registrando l'ascoltatore appropriato. Per ulteriori
informazioni, consulta
SelectionTracker.Builder
.
L'esempio seguente mostra come combinare 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 usi 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 delle attività, l'app deve chiamare i metodi onSaveInstanceState()
e onRestoreInstanceState()
del tracker di selezione rispettivamente dai metodi onSaveInstanceState()
e onRestoreInstanceState()
dell'attività. L'app deve anche fornire un ID selezione univoco al costruttore SelectionTracker.Builder
. Questo ID è obbligatorio perché
un'attività o un frammento potrebbe avere più di un elenco distinto e selezionabile,
il quale deve essere mantenuto nello stato di salvataggio.
Risorse aggiuntive
Per ulteriori informazioni, consulta i seguenti riferimenti.
- App demo Girasole, che utilizza
RecyclerView
. - Utilizza RecyclerView per visualizzare un elenco scorrevole.
- Codelab su Android Kotlin Fundamentals: nozioni di base su RecyclerView.