it-swarm.com.de

LinearLayoutManager setReverseLayout () == true, aber die Elemente stapeln sich von unten

Dies scheint eine einfache Lösung zu sein, aber diese Einstellung scheint

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private LinearLayoutManager mLayoutManager;

.... // More code

    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);

    // Add item decoration
    mRecyclerView.addItemDecoration(new SpacesItemDecoration(DIVIDER_SPACE));

    // use this setting to improve performance if you know that changes
    // in content do not change the layout size of the RecyclerView
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
    mLayoutManager = new LinearLayoutManager(getActivity());
    mLayoutManager.setReverseLayout(true); // THIS ALSO SETS setStackFromBottom to true
    mRecyclerView.setLayoutManager(mLayoutManager);

Scheint auch, die Elemente von unten zu stapeln

Ich habe versucht, setStackFromBottom auf false zu setzen, aber das hat nichts getan. Was wäre der beste Weg, um die Reihenfolge der Elemente umzukehren, aber immer noch von oben zu füllen? Soll ich stattdessen eine Custom Comparator-Klasse verwenden? Ich hatte gehofft, dass dies ein einfacherer Prozess wäre, als eine andere Klasse zu erstellen.

38
AndyRoid

aus den Dokumenten für setReverseLayout

Wird verwendet, um den Artikeldurchlauf und die Layoutreihenfolge umzukehren. Dies verhält sich ähnlich wie die Layoutänderung für RTL-Ansichten. Bei true wird das erste Element am Ende der Benutzeroberfläche angeordnet, das zweite Element wird davor angeordnet. Bei horizontalen Layouts hängt es von der Layoutrichtung ab. Wenn der Wert auf true gesetzt ist, wenn RecyclerView LTR ist, dann wird das Layout aus RTL erstellt. Wenn RecyclerView} RTL ist, erfolgt das Layout aus LTR. Wenn Sie genau dasselbe Verhalten von setStackFromBottom(boolean) suchen, verwenden Sie setStackFromEnd(boolean).

Versuchen Sie also auch, setStackFromEnd (boolean) auf Ihrer LinearLayoutManager-Instanz zu verwenden.

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
105
petey

Die akzeptierte Antwort funktioniert gut und ich habe eine schwierige Zeit durchgemacht, um sie funktionieren zu lassen, da ich can not resolve method setReverseLayout Fehler bekam. 

Nachdem ich nach Lösungen gesucht hatte, fand ich dort einen dummen Fehler. Ich habe RecyclerView.LayoutManager anstelle von LinearLayoutManager verwendet. 

Also dachte ich, um die Verwirrungen in der Umgebung zu beseitigen, muss ich es als Antwort aufstellen. 

Verwenden Sie nicht RecyclerView.LayoutManager anstelle von LinearLayoutManager

// Declare your RecyclerView and the LinearLayoutManager like this 
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;

... 

// Now set the properties of the LinearLayoutManager 
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);

// And now set it to the RecyclerView
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(yourAdapter);
28
Reaz Murshed

Ich habe die effektive Methode gefunden, um dieses Problem mit XML zu lösen:

app:layoutManager="Android.support.v7.widget.LinearLayoutManager"
app:stackFromEnd="true"
0
Kirk_hehe