2015-02-13 14 views
5

Diciamo che la seguente serie di voci Visualizzazioni:RecyclerView circolare

View1 -> View2 -> View3 -> ... -> View(n-1) -> View(n) 

Su RecyclerView classico, Visualizzazione1 sarebbe in prima posizione e Vista (n) su scorso. Ora vorrei fare quella circolare in modo dopo l'ultima posizione che scorrere di nuovo alla prima posizione:

View1 -> View2 -> View3 -> ... -> View(n-1) -> View(n) -> View1 -> View2 -> ... 

questo in un primo sguardo sembra semplice da fare, ma non sono sicuro come realizzare che "reset" dopo View (n). Qualsiasi consiglio sarebbe davvero utile. Grazie.

risposta

0

Non l'ho fatto da solo, ma penso che questo approccio funzionerebbe.

Per prima cosa è necessario sapere quali viste sono allegate/visibili. Un listener di modifiche alla gerarchia potrebbe eseguire questa operazione o una visualizzazione personalizzata che riduce le visualizzazioni degli articoli. Ad ogni modo, quando sei vicino alla parte finale dell'adattatore, inizi semplicemente a tracciarti; rimuovere gli elementi dall'altra parte dell'adattatore e aggiungerli a questa estremità, chiamando notifyRangeInserted e notifyRangeRemoved mentre si esegue questa operazione. Le viste rimosse e inserite dovrebbero essere al di fuori dell'area visualizzata in modo che non si verifichino animazioni, sebbene per GridLayoutManager sia necessario lavorare in multipli del numero di colonne.

Dovrete pensare a cosa fare quando non c'è abbastanza contenuto per riempire la vista del riciclatore. Probabilmente vorrai anche avere almeno alcuni elementi prima della visualizzazione del riciclatore mentre scorre, potresti dover aggiungere dei duplicati per farlo. Preferirei spostare almeno una schermata di contenuto in anticipo alla volta.

Immagino che l'indicatore di scorrimento verrà eliminato. Un gestore di layout personalizzato potrebbe fornire un indicatore abbastanza buono.

4

Fare riferimento a this solution per ListView. Puoi scrivere un RecyclerView.Adapter con gli articoli Integer.MAX_VALUE. L'unica differenza è che RecyclerView non ha più il metodo setSelectionFromTop. Invece si dovrebbe chiamare

recyclerView.getLayoutManager().scrollToPosition(recyclerAdapter.MIDDLE); 

per scorrere la recyclerView alla metà in un primo momento.