The world of RecyclerView – parte 2

Posted by on Mar 25, 2015 in Tutte | 0 comments

The world of RecyclerView – parte 2

Nella prima parte di questa serie di articoli dedicati al mondo delle RecyclerView ho descritto il nuovo approccio alle liste dal punto di vista teorico,  in questa seconta parte vi illustrerò il  codice dell’ esempio allegato.

L’ esempio visualizza una lista di nomi di paesi.

Per prima cosa importiamo le dipendenze. Nel file build.gradle del modulo app inseriamo:

 

Il layout dell’ Activity: in questo esempio ho usato anche  la nuova Toolbar.

activity_main.xml

Il layout di un singolo item: una semplice TextView.

country_item.xml

Nell’ activity principale nel metodo onCreate ho scritto il codice per utilizzare la RecyclerView.

Nella prima riga creo un ArrayList<String> prendendo i dati da un array-string dalle risorse string, poi recupero il riferimento della RecyclerView.
La RecyclerView utilizza un’ istanza di RecyclerView.Adapter:  ho creato l’ adapter CountriesAdapater che vedremo dopo.
Utilizziamo il costruttore per passare la lista dei Model all’ adapter.

Come descritto nella prima parte della serie, le RecyclerView non si occupano della visualizzazione delle view,  questo compito adesso è gestito da un layout manager.
Le tipologie di layout manager che possiamo usare di default sono 3:

  • LinearLayoutManager: crea una lista verticale o orizontale.
  • GridLayoutManager: crea una griglia a blocchi
  • StaggeredGridLayoutManager: crea una griglia a blocchi non ordinati

E’ possibile anche creare dei layout manager personalizzati.

Nell’ esempio ho utilizzato un’ istanza di LinearLayoutManager che di default usa l’ orientamento verticale come nelle ListView.
La riga 7 può essere anche omessa, per le animazioni useremo un’ istanza della classe RecyclerView.ItemAnimator; vedremo nella terza parte di questa serie come personalizzare le animazioni.
Come nelle ListView  passiamo alla Recyclerview l’ adapter.
In  6-7 righe troviamo tutto il codice che ci serve per creare e configurare una lista.

E’ arrivato il momento di guardare con attenzione il nuovo adapter.
L’ adapter che utilizza la RecyclerView non estende più un BaseAdapter o un ArrayAdapter<T> ma è  una sottoclasse del RecyclerView.Adapter con il parametro generics del nuovo ViewHolder: in questo caso MyViewHolder che estende RecyclerView.ViewHolder

Il team di sviluppo Android  ha sempre consigliato l’ implementazione del pattern ViewHolder per fare cache delle view(e rendere efficienti le liste):  adesso ha creato una sua implementazione.(Era ora !! 🙂 )

Ecco il codice:

I metodi più importanti dell’ adapter sono due:  onCreateViewHolderonBindViewHolder

Il metodo onCreateViewHolder esegue l’ inflate del layout (riga 14) e crea l’ istanza di MyViewHolder .
MyViewHolder estende RecyclerView.ViewHolder e si occupa di recuperare le view e creare la cache.
Il metodo onBindViewHolder gestisce le varie view che fanno parte del layout, in questo caso utilizza la TextView  mCountryText per scrivere il nome del paese (riga 21).

Per quanto riguarda la creazione della lista è tutto, Google ha semplificato il più possibile.

Ecco la nostra lista:

List Vertical

Lo schema è semplice: RecyclerView+LinearLayoutManager+Adapter (Model)

RecyclerView Schema

Nell’ esempio che vi ho allegato nella prima parte  e che vi riallego anche in questa, ho aggiunto la possibilità di cambiare in runtime il tipo di layout manager per farvi rendere conto della flessibilità ed estendibilità delle RecyclerView.

Attraverso le opzioni del menu settiamo un diverso layout manager .

Al tap del menu  grid creo un GridLayoutManager che visualizza la lista sotto forma di griglia (riga 4).
Ho aggiunto anche l’ opzione setSpanSizeLookup che determina  lo spazio di ogni item.

Ecco il risultato:

GridLayout

Al tap del menu list cambio l’ orientamento del LinearLayoutManager da verticale ad orizzontale e viceversa (righe 25 e 30).

Ecco il risultato:

List Horizontal

Con poche righe di codice possiamo cambiare totalemente la tipologia di visualizzazione delle nostre liste.

Le RecyclerView hanno un potenziale interessante e penso che Google ha l’ interesse a migliorarle (vedremo al Google I/O 2015).

E’ tutto, alla prossima puntata.

RecyclerViewExample source in GitHub

 

 

 

 

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *