2016-07-03 8 views
11

Attualmente, sto esplorando la possibilità di visualizzare i dati da un database strisciata sinistra a destra e anche consentendo agli utenti add e rimuovere i dati da qualsiasi posizione nella matrice di dati. Ho scoperto che ci sono 2 possibili soluzioni per farlo. Uno è un RecyclerView con scorrimento orizzontale e l'altro è un ViewPager con un FragmentStatePagerAdapter. Quale è più efficiente? In termini di Utilizzo della memoria e Facilità di implementazione?RecyclerView vs ViewPager

Grazie.

risposta

16

Direi che sono comparabili in termini di utilizzo della memoria e facilità di implementazione. Dove differiscono di più è nell'interazione che forniscono all'utente.

ViewPager è progettato per mostrare un articolo alla volta. L'elemento visibile occupa tutta la larghezza dello ViewPager. Puoi scorrere solo un elemento alla volta e scorrere sempre a scatto per mostrare un elemento al centro: non ti verrà mai lasciato in una posizione intermedia che mostra parzialmente due elementi.

RecyclerView con un gestore di layout orizzontale, d'altra parte può avere elementi di qualsiasi larghezza - si potrebbe essere che mostra molti oggetti in una volta o si potrebbe avere elementi più ampi che la larghezza RecyclerView s' o si potrebbe abbinare la loro larghezza di imitare ViewPager. Puoi scorrere liberamente - non sei limitato alla larghezza di un articolo o alla larghezza di RecyclerView, puoi eseguire un gesto di lancio per scorrere grandi distanze. E non c'è azzeramento: quando lo scorrimento termina non ci sono elementi allineati al centro o a nessuno dei lati.

Come vedi ci sono alcune differenze. Ti consiglierei di scegliere il tuo widget in base all'interfaccia utente che desideri raggiungere. Se si desidera il comportamento di ViewPager (un elemento visibile alla volta, scorrere il dito su un elemento e fare lo snap per mostrare l'elemento completo), quindi utilizzare lo ViewPager. È possibile, ma non banale, replicare questo comportamento utilizzando uno RecycleView. Direi sicuramente che è molto più difficile usare RecyclerView se vuoi farlo comportarsi come ViewPager. Viceversa è praticamente impossibile personalizzare il comportamento di ViewPager, quindi se questo non è quello che vuoi, allora dovresti sicuramente usare uno RecyclerView.

+7

Poiché la libreria di supporto 24.2.0, lo snap in Recycler View è ora molto facile da ottenere. Inoltre, è possibile simulare il comportamento di ViewPager ignorando la classe Snap Helper. http://stackoverflow.com/questions/29134094/recyclerview-horizontal-scroll-snap-in-center – aldok

+0

Restituire * 0,5f * da 'FragmentStatePagerAdapter' L'opzione' getPageWidth() 'sostituisce la metà dello schermo. C'è un sovraccarico nel tracciare l'orientamento sinistra/destra. – samosaris

0

Non c'è confronto tra questi due. fondamentalmente in ViewPager è possibile scorrere solo un elemento alla volta (a sinistra o a destra), e in RecyclerView è possibile scorrere fino a qualsiasi indice. tutto dipende dalle tue esigenze come vuoi usarlo. è necessario sviluppare frammenti per ViewPages, uno per ogni pagina. come in RecyclerView avrete un oggetto che verrà utilizzato dall'adattatore. entrambi sono facili da implementare. ci sono numerosi esempi su entrambi, puoi dare un'occhiata e iniziare.

+1

I frammenti non sono un requisito per ViewPager, è possibile utilizzarlo con viste semplici, più o meno come viste di elementi in un RecyclerView. –

3

In termini di facilità di implementazione (questa è solo la mia opinione),

ViewPager è buono per visualizzare l'elenco dei dati che è non richiesto spesso aggiungere e rimuovere dal PagerAdapternon può comunicare ogni l'articolo specifico che viene rimosso o aggiunto può solo chiamare notifyDataSetChanged() che notifica che tutto il set di dati è stato modificato. Pertanto, è difficile gestire l'animazione quando l'elemento viene aggiunto o rimosso.

Mentre in RecyclerView, RecyclerView.Adapter ha metodi come notifyItemInserted(int position) o notifyItemRemoved(int position) per notificare che specifica l'elemento viene aggiunto o rimosso e, l'animazione quando l'articolo è aggiungere o rimuovere è già gestire quando hai chiamato quelli metodo.

Inoltre, al momento è molto semplice per RecyclerView simulare il comportamento ViewPager utilizzando SnapHelper. C'è PagerSnapHelper e il comportamento di ViewPager può essere ottenuto con poche righe di codice. Puoi contattarmi se vuoi il codice.

+0

Sarà molto utile se puoi postare il tuo codice qui – Sourabh

+0

Questo è il link alla mia risposta su come usare 'RecyclerView' per imitare' ViewPager' http://stackoverflow.com/questions/29134094/recyclerview-horizontal -scroll-snap-in-center/42128379 # 42128379 È questo quello che vuoi? –

+0

In realtà speravo che esistesse un qualche tipo di listener per il cambio di pagina ma immagino che 'onScrollStateChange' e' LayoutManager.findFirstCompletelyVisibleItem' facciano il numero – Sourabh