Personalizza un elenco dinamico Parte di Android Jetpack.
Puoi personalizzare gli oggetti RecyclerView per soddisfare le tue esigenze specifiche. Le classi standard descritte in Crea 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 ViewHolder 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.
Modifica 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 visualizzazione, un gestore del layout potrebbe chiedere all'adattatore 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 ricerche findViewById() costose. 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 di unRecyclerViewconLinearLayoutManageroffre funzionalità come un layoutListView.GridLayoutManager: dispone gli elementi in una griglia bidimensionale, come i quadrati di una scacchiera. L'utilizzo di unRecyclerViewconGridLayoutManagerfornisce funzionalità come un layoutGridView.StaggeredGridLayoutManager: dispone gli elementi in una griglia bidimensionale, con ogni colonna leggermente sfalsata rispetto alla precedente, come le stelle su una bandiera americana.
Se questi gestori di layout non soddisfano le tue esigenze, puoi crearne uno tuo estendendo la classe astratta RecyclerView.LayoutManager.
Aggiungi animazioni degli 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 tramite tocco o mouse. In questo modo, puoi mantenere il controllo sulla presentazione visiva di un elemento selezionato. Puoi anche mantenere il controllo sulle policy 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 della selezione a un'istanza RecyclerView, segui
questi passaggi:
- 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. - Implementa
ItemDetailsLookup. - Aggiorna gli oggetti
Viewdell'elemento inRecyclerViewper indicare 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(), sull'oggettoViewcontrueofalse, a seconda che l'elemento sia selezionato o meno. - Aggiorna lo stile della visualizzazione per rappresentare lo stato attivato. Ti consigliamo di utilizzare una risorsa elenco di stati dei colori per configurare lo stile.
- In
- Utilizza
ActionModeper fornire all'utente gli strumenti per eseguire un'azione sulla selezione. - Esegui le 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 su RecyclerView elementi dato un MotionEvent.
In pratica, è una factory per le istanze ItemDetails di cui viene eseguito il backup o che vengono 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 Elimina alla barra ActionMode e collegare la freccia Indietro sulla barra per cancellare la selezione. Quando la selezione diventa vuota, se l'utente la cancella 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 sta tentando di trascinare un elemento o un insieme di elementi selezionati. Reagisci a queste interpretazioni registrando l'ascoltatore appropriato. Per saperne di più, 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'istanza 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 nel tuo RecyclerView.Adapter. In caso contrario, non puoi controllare lo stato di selezione di un elemento dal metodo onBindViewHolder().
Per preservare lo stato della selezione durante gli eventi del ciclo di vita dell'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 inoltre fornire un ID di selezione univoco al costruttore SelectionTracker.Builder. Questo ID è obbligatorio perché un'attività o un frammento potrebbe avere più di un elenco distinto e selezionabile, tutti da mantenere nello stato salvato.
Risorse aggiuntive
Per ulteriori informazioni, consulta i seguenti riferimenti.
- App demo Sunflower, che utilizza
RecyclerView. - Codelab Utilizza RecyclerView per visualizzare un elenco scorrevole.
- Codelab Nozioni di base di Android Kotlin: nozioni di base su RecyclerView.