Personalizzare un elenco dinamico Parte di Android Jetpack.
Puoi personalizzare gli oggetti RecyclerView in base alle 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 holder 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 possibili personalizzazioni.
Modificare il layout
RecyclerView utilizza un gestore di 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 visualizzazione, un gestore di layout
potrebbe chiedere all'adapter di sostituire i contenuti della visualizzazione con un
elemento diverso del set di dati. Il riciclo delle visualizzazioni in questo modo migliora le prestazioni evitando la creazione di visualizzazioni non necessarie o l'esecuzione di costose ricerche findViewById(). L'Android Support Library include tre gestori di layout standard,
ognuno dei quali offre molte opzioni di personalizzazione:
LinearLayoutManager: dispone gli elementi in un elenco unidimensionale. L'utilizzo diRecyclerViewconLinearLayoutManagerfornisce funzionalità simili a un layoutListView.GridLayoutManager: dispone gli elementi in una griglia bidimensionale, come i quadrati di una scacchiera. L'utilizzo di unRecyclerViewconGridLayoutManagerfornisce funzionalità simili a unGridViewlayout.StaggeredGridLayoutManager: dispone gli elementi in una griglia bidimensionale, con ogni colonna leggermente spostata rispetto a quella precedente, come le stelle di una bandiera americana.
Se questi gestori di layout non soddisfano le tue esigenze, puoi crearne uno tuo 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.
Attivare la selezione degli elementi dell'elenco
La libreria
recyclerview-selection
consente agli utenti di selezionare gli elementi in un elenco RecyclerView utilizzando l'input touch
o del mouse. In questo modo puoi mantenere il controllo sulla presentazione visiva di un elemento selezionato. Puoi anche mantenere il controllo sulle policy che regolano il comportamento di selezione, ad esempio quali elementi sono idonei alla selezione e quanti elementi possono essere selezionati.
Per aggiungere il supporto per la selezione a un'istanza RecyclerView:
- Determina il tipo di chiave di selezione da utilizzare, quindi crea un
ItemKeyProvider.Esistono tre tipi di chiavi che puoi utilizzare per identificare gli elementi selezionati:
Parcelablee le relative sottoclassi, comeUriStringLong
Per informazioni dettagliate sui tipi di chiavi di selezione, consulta
SelectionTracker.Builder. - Implement
ItemDetailsLookup. - Aggiorna gli oggetti degli elementi
ViewinRecyclerViewper riflettere se l'utente li seleziona o li deseleziona.La libreria di selezione non fornisce una decorazione visiva predefinita per gli elementi selezionati. Forniscila quando implementi
onBindViewHolder(). Ti consigliamo il seguente approccio:- In
onBindViewHolder(), chiamasetActivated()—nonsetSelected()—sull' oggettoViewcontrueofalse, a seconda che l'elemento sia selezionato. - Aggiorna lo stile della visualizzazione per rappresentare lo stato attivato. Ti consigliamo di utilizzare una risorsa di elenco di stati di colore per configurare lo stile.
- In
- Utilizza
ActionModeper 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.
È effettivamente una factory per
ItemDetails
istanze di cui è stato eseguito il backup o estratte da un'
RecyclerView.ViewHolder
istanza.
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 Elimina alla
ActionMode barra 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à 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, consulta SelectionTracker.Builder.
L'esempio seguente 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'
istanzaSelectionTracker, la tua app deve fornire lo stesso
che utilizzi per inizializzare RecyclerView a
SelectionTracker.Builder.RecyclerView.Adapter Per questo motivo, dopo aver creato l'
SelectionTracker istanza, 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 negli 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 anche fornire un ID di selezione univoco al
SelectionTracker.Builder costruttore. Questo ID è obbligatorio perché
un'attività o un fragment potrebbe avere più di un elenco selezionabile distinto,
tutti da conservare nello stato salvato.
Risorse aggiuntive
Per ulteriori informazioni, consulta i seguenti riferimenti.
- App demo
Sunflower, che utilizza
RecyclerView. - Codelab Utilizzare RecyclerView per visualizzare un elenco scorrevole.
- Codelab Nozioni di base su RecyclerView di Android Kotlin Fundamentals.