2014-12-11 12 views
45

Also was ich versuche zu gehen, ist ein gestaffeltes Layout, aber das erste Element in der Liste muss zwei Spalten umfassen. Die ersten beiden Reihen haben ebenfalls eine feste Höhe. Ich habe alles außer dem ersten Gegenstand, der zwei Spalten überspannt.Spannen Sie mehrere Spalten mit RecyclerView

Ich verwende den RecyclerView.Adapter mit dem StaggeredGridLayoutManager. Scheint nicht, als ob es out-of-the-box-Funktionalität ist. Ich nehme an, ich kann einen benutzerdefinierten Layout-Manager erstellen. Ich bin mir nicht sicher, wo ich anfangen soll. Ich habe versucht, zu suchen, aber ich kann nichts darüber finden, wie man Elemente erhält, die sich über mehrere Spalten erstrecken.

Das Bild unten ist was ich suche in der Liste.

Staggered layout

+0

Haben Sie jemals einen Weg gefunden, dies zu erreichen? –

+0

Das erste Element umfasst immer zwei Spalten. Ich musste den negativen rechten Rand setzen, um die Ergebnisse zu erhalten. Das zweite Element ist ein Dummy-Element mit der Sichtbarkeit INVISIBLE. – DDukesterman

+0

Ist es möglich, dass Sie Ihren Code über diese Lösung teilen? Ich versuche das gleiche Ergebnis zu erzielen, aber ohne Erfolg. – MHogge

Antwort

49

Derzeit StaggeredGridLayoutManager unterstützt nur Ansichten, die alle Spalten erstrecken (für ein vertikal konfigurierte Layout), und nicht um eine beliebige Anzahl von ihnen.

Wenn Sie noch sie über alle Spalten zu überbrücken wollen, sollten Sie dies in der Adapterimplementierung tun:

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

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

IMHO, StaggeredGridLayoutManager ist noch in der Entwicklung und Google will, dass wir es für Feedback verwenden, :(

+0

versucht dies - getLayoutParams gibt null zurück. Wer hat Glück? –

+0

@JasonVanAnden, getLayoutParams gab mir auch null zurück. Vielleicht kann meine Antwort dir helfen. – ljmelgui

+0

Hmmm das sollte nicht passieren zu der Zeit "onBindViewHolder" heißt ... Vielleicht haben Sie ein anderes Problem woanders und Sie sind nur Workarounding es. – mato

8

Was ich tat, alle Spalten für ein vertikal konfigurierte Layout zu überbrücken waren neu LayoutParams schaffen und volle Spanne auf true im Adapter der Umsetzung:

Verwandte Themen