2015-04-03 9 views
12

RecyclerView viene aggiunto a v7 support library dall'API Android 22 ufficialmente. E molte persone hanno detto che si tratta di un miglioramento rispetto a ListView e molte brevi introduzioni al suo utilizzo sono state pubblicate su Internet. Ma la maggior parte di questi articoli è molto semplice, superficiale e vuota. Il miglioramento è solo RecyclerView.ViewHolder, RecyclerView.ItemAnimator o RecylerView.SmoothScroller? Il recycling and reuse mechanism delle viste degli elementi durante lo scorrimento differisce dal ListView? E cos'è esattamente lo enhancement di RecyclerView su ListView?Qual è il miglioramento di RecyclerView su ListView?

Qualsiasi risposta, suggerimento o collegamento sono apprezzati. Grazie in anticipo.

+5

È possibile leggere [questo] (https://www.grokkingandroid.com/first-glance-androids-recyclerview/). – Harry

+1

Non ruba la tua attenzione dagli elementi che sono visualizzati nella visualizzazione del riciclatore, questo è certo. Quindi puoi avere elementi cliccabili senza averlo con sé – EpicPandaForce

+0

Controlla questo [Post] (http://stackoverflow.com/questions/28392554/should-we-use-recyclerview-to-replace-listview) – Xcihnegn

risposta

10

Come da documentazione ufficiale RecyclerView è un importante miglioramento rispetto a ListView. Contiene molte nuove funzionalità come ViewHolder, ItemDecorator, LayoutManager e SmoothScroller. Ma una cosa che certamente gli dà un vantaggio rispetto allo ListView è; la possibilità di avere animazioni durante l'aggiunta o la rimozione di un oggetto.

Visualizza titolari

In ListView, definendo vista titolari è stato un approccio suggerito per riferimenti conservazione per le viste. Ma non era una compulsione. Anche se per il non lo si fa, ListView utilizzato mostra i dati non aggiornati. Un altro svantaggio principale di non utilizzare i titolari di view potrebbe portare a una pesante operazione di individuazione di viste di id ogni volta. Quale risultato in laggy ListView s.

Questo problema è risolto in RecylerView mediante l'utilizzo della classe RecyclerView.ViewHolder. Questa è una delle principali differenze in RecyclerView e ListView. Quando si implementa una RecyclerView, questa classe viene utilizzata per definire un oggetto ViewHolder che viene utilizzato dall'adattatore su bind ViewHolder con una posizione. Un altro punto da notare qui è che mentre si implementa l'adattatore per RecyclerView, fornire un ViewHolder è obbligatorio. Ciò rende l'implementazione un po 'complessa da , ma risolve i problemi affrontati in ListView.

Layout Manager

Parlando di ListView s, un solo tipo di ListView è disponibile cioè verticale ListView. Non è possibile implementare uno ListView con lo scorrimento orizzontale . So che ci sono modi per implementare uno scorrimento orizzontale , ma credetemi non è stato progettato per funzionare in questo modo.

Ma ora quando guardiamo Android RecyclerView vs ListView, abbiamo il supporto per le raccolte orizzontali pure. In effetti supporta più tipi di elenchi. Per supportare più tipi di elenchi utilizza la classe RecyclerView.LayoutManager. Questo è qualcosa di nuovo che ListView non ha.RecyclerView supporta tre tipi di layout predefiniti gestori:

LinearLayoutManager - Questo è il gestore di layout più comunemente usato in caso di RecyclerView. Tramite questo, possiamo creare sia elenchi di scorrimento verticale sia in verticale .
StaggeredGridLayoutManager - Tramite questo gestore di layout , è possibile creare elenchi sfalsati. Proprio come lo schermo di Pinterest .
GridLayoutManager - Questo gestore di layout può essere utilizzato per visualizzare le griglie , come qualsiasi galleria di immagini.

Animator Articolo

Animazioni in una lista è una dimensione completamente nuova, che ha infinite possibilità . In un ListView, come tale non ci sono disposizioni speciali attraverso cui è possibile animare, aggiungere o eliminare elementi. Invece in seguito come Android evoluto ViewPropertyAnimator è stato suggerito da Chet Haase di Google in questo video tutorial per le animazioni in ListView. D'altra parte, confrontando Android RecyclerView rispetto a ListView, ha la classe RecyclerView.ItemAnimator per la gestione delle animazioni. Attraverso questa classe è possibile definire animazioni personalizzate per l'aggiunta, la cancellazione e gli eventi di spostamento . Inoltre fornisce uno DefaultItemAnimator, nel caso in cui non sia necessario eventuali personalizzazioni.

adattatore

ListView adattatori erano semplici da implementare. Avevano un metodo principale getView in cui tutta la magia accadeva. Dove le viste erano legate a una posizione. Inoltre avevano un interessante metodo registerDataSetObserver dove è possibile impostare un osservatore direttamente nell'adattatore . Questa funzione è presente anche in RecyclerView, ma viene utilizzata per la classe RecyclerView.AdapterDataObserver. Ma il punto a favore di ListView è che supporta tre implementazioni di default di adattatori:
ArrayAdapter
CursorAdapter
SimpleCursorAdapter
Mentre RecyclerView adattatore, ha tutte le funzionalità che ListView adattatori avevano tranne il supporto incorporato per i cursori DB e ArrayLists . In RecyclerView.Adapter a partire da ora dobbiamo realizzare un'implementazione personalizzata per fornire i dati all'adattatore. Proprio come fa un BaseAdapter per ListView s. Sebbene si desideri avere maggiori informazioni sull'implementazione dell'adattatore RecyclerView , fare riferimento a Android RecyclerView Example.

decorazioni Articolo

Per visualizzare divisori personalizzati in un ListView, si sarebbe potuto facilmente aggiunto questi parametri nel XML ListView:
android:divider="@android:color/transparent" android:dividerHeight="5dp"
La parte interessante di Android RecyclerView è che, al momento, non mostra un divisore tra gli articoli per impostazione predefinita. Anche se i ragazzi di Google devono aver lasciato questo fuori per la personalizzazione, intenzionalmente. Ma ciò aumenta notevolmente lo sforzo di per uno sviluppatore. Se si desidera aggiungere un divisorio tra gli articoli, potrebbe essere necessario eseguire un'implementazione personalizzata utilizzando la classe RecyclerView.ItemDecoration. In alternativa è possibile applicare un hack utilizzando questo file da campioni ufficiali: DividerItemDecoration.java

+1

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. – Mifeet

+1

@Mifeet, ho modificato la mia risposta ~ – SilentKnight

1
  1. Visualizza titolari

    RecylerView con l'uso di classe di RecyclerView.ViewHolder. Questo è uno delle principali differenze in RecyclerView e ListView. Quando attuazione di un RecyclerView questa classe viene utilizzata per definire un oggetto ViewHolder che viene utilizzato dalla scheda di impegnare ViewHolder con una posizione

  2. Layout Manager supporto

    per collezioni orizzontale. In effetti supporta più tipi di elenchi. Per supportare più tipi di elenchi utilizza la classe RecyclerView.LayoutManager. Questo è qualcosa di nuovo che ListView non ha. RecyclerView supporta tre tipi di layout predefinito. Manager: LinearLayoutManager: è il gestore di layout più comunemente utilizzato in caso di RecyclerView. Attraverso questo, possiamo creare entrambi gli elenchi di scorrimento orizzontale e verticale . StaggeredGridLayoutManager - Tramite questo gestore di layout, possiamo creare elenchi sfalsati. Proprio come lo schermo di Pinterest. GridLayoutManager: questo layout manager può essere utilizzato per visualizzare le griglie, come qualsiasi galleria di immagini.

  3. dell'oggetto Animator

    RecyclerView ha classe RecyclerView.ItemAnimator per la gestione animazioni. Attraverso questa classe è possibile definire animazioni personalizzate per l'aggiunta di elementi , gli eventi di cancellazione e spostamento. Fornisce anche un DefaultItemAnimator, nel caso in cui non siano necessarie personalizzazioni.

  4. adattatore

    In RecyclerView.Adapter fin d'ora dobbiamo fare un'implementazione personalizzata di fornire i dati per l'adattatore. Proprio come un BaseAdapter fa per ListViews.

Fonte: http://www.truiton.com/2015/03/android-recyclerview-vs-listview-comparison/

13

E che cosa è esattamente la valorizzazione del RecyclerView sopra ListView?

RecyclerView non è un "miglioramento" "over ListView", in senso stretto. ListView fa effettivamente qualcosa; RecyclerView, da solo, no. Un confronto più accurato sarebbe che il RecyclerViewframework è un miglioramento rispetto a AdapterView e, in una certa misura, la classe genitore 2 di ListView e GridView.

RecyclerView si concentra sul riciclaggio di widget e sulla gestione lorda del figlio View. Delega tutto il resto ad altre classi. AdapterView fa molto meno, rendendo più difficile l'estensione funzionale.

Di nota:

  • Posa i bambini, all'interno dello spazio scorrevole del RecyclerView, è delegata ai manager. Quindi, non solo tre navi con recyclerview-v7 (elenco, griglia, griglia sfalsata), ma altre possono essere sviluppate per scenari alternativi (ad esempio, bambini sovrapposti, per un tipo di esperienza StackView o Gallery).

  • Gli aggiornamenti dagli adattatori possono essere molto più sottili a. Con AdapterView, è necessario ridisegnare l'intera vista (ad esempio, un ListView e tutte le sue righe) in qualsiasi modifica di importanza, in particolare quando si aggiungono e rimuovono elementi. Il meccanismo di aggiornamento negli adattatori RecyclerView indica le posizioni specifiche che cambiano. Ciò non solo richiede meno tempo di elaborazione, ma aiuta a abilitare gli effetti animati che RecyclerView offre (di nuovo, con sostituzioni collegabili) per aggiungere, spostare e rimuovere elementi.

  • Altre cose che sono state "trasformate" in ListView, come disegnare divisori, sono ora estratte in punti di estensione, come ad esempio ItemDecorator. Ora puoi scegliere come "decorare" oggetti, con divisori di linea o scatole o separatori di barre colorate o altro. La decorazione non è limitata ai "divisori", ma può influenzare qualsiasi cosa nelle viste che, per un motivo o per un altro, consideri di essere separato dalle visualizzazioni degli oggetti stessi.

RecyclerView, tuttavia, è abbastanza complicato andare avanti. Quello che ottieni da ListView "pronto all'uso" richiede molto più codice - il tuo o una libreria di terze parti - da abbinare. Per gli sviluppatori esperti, questa è una funzionalità, in quanto il codice è sostituibile con un altro codice. Per i nuovi arrivati, questo è un bug, in quanto vi è una curva di apprendimento più ripida per RecyclerView, IMHO.

+1

Non dimentichiamo che ora possiamo accedere ai valori di scorrimento REAL senza sporchi workarrounds. – Ercan

Problemi correlati