2014-12-11 15 views
45

Quindi, quello che sto cercando di fare è avere un layout sfalsato ma il primo elemento nell'elenco deve estendersi su due colonne. Le prime due file hanno anche un'altezza fissa. Ho tutto funzionante tranne il primo elemento che si estende su due colonne.Span multiple colonne con RecyclerView

Sto utilizzando RecyclerView.Adapter con StaggeredGridLayoutManager. Non sembra che funzioni fuori dalla scatola. Presumo di poter creare un gestore di layout personalizzato Non sono sicuro di dove cominciare. Ho provato a cercare ma non riesco a trovare nulla su come ottenere elementi su più colonne.

L'immagine seguente è ciò che sto cercando nell'elenco.

Staggered layout

+0

Hai mai trovato un modo per realizzare questo? –

+0

Il primo elemento si estende sempre su due colonne. Ho dovuto mettere il margine destro negativo per ottenere i risultati. Il secondo elemento è un oggetto fittizio con visibilità impostata su INVISIBILE. – DDukesterman

+0

È possibile che condividi il tuo codice su quella soluzione? Sto cercando di ottenere lo stesso risultato ma senza successo. – MHogge

risposta

49

Attualmente, StaggeredGridLayoutManager supporta solo viste che si estendono tutte le colonne (per un layout configurato verticalmente), e non un numero arbitrario di loro.

Se si desidera comunque estendersi loro in tutte le colonne, si dovrebbe fare questo nella realizzazione dell'adattatore:

public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); 
    layoutParams.setFullSpan(true); 
} 

IMHO, StaggeredGridLayoutManager è ancora in fase di sviluppo pesante e Google ci vuole usarlo per il feedback :(

+0

tentativo di questo - getLayoutParams restituisce null. Qualcuno ha fortuna? –

+0

@JasonVanAnden, getLayoutParams mi ha restituito anche null. Forse la mia risposta può aiutarti. – ljmelgui

+0

Hmmm che non dovrebbe accadere al momento "onBindViewHolder' è chiamato ... Forse hai un altro problema da qualche altra parte e stai solo risolvendolo. – mato

8

Quello che ho fatto per attraversare tutte le colonne per un layout configurato in verticale era creare nuovi LayoutParams e set completo portata a true nella realizzazione dell'adattatore:

@Override 
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) { 

    StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
    layoutParams.setFullSpan(true); 
    viewHolder.itemView.setLayoutParams(layoutParams); 
}