5

Ich habe eine RecyclerView wie folgt definiert:App: StackFromEnd für RecyclerView funktioniert nicht in XML?

<android.support.v7.widget.RecyclerView 
     android:id="@+id/message_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/message_input" 
     android:layout_alignParentTop="true" 
     app:stackFromEnd="true" /> 

Verwandte Code auch gemeinsam eine solche verwendet wird:

LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
    //layoutManager.setStackFromEnd(true); 
    mRecyclerView.setLayoutManager(layoutManager); 

Jedoch, wenn ich ein Element hinzu RecyclerView, ist es nicht app:stackFromEnd="true" nicht respektiert. Auf der anderen Seite, wenn ich kommentar und layoutManager.setStackFromEnd(true); programmatisch verwenden, funktioniert es gut. Was ist das Problem, das ich vermisse? Irgendwelche Ideen sind willkommen.

Antwort

9

Ich stieß auf etwas ähnliches. Das Problem ist, dass wenn das RecyclerView aufgeblasen wird, es das Attribut liest.

Aber dann weisen Sie einen neuen LinearLayoutManager zu, der im Java-Code erstellt wird. Bei diesem neuen Manager ist das Attribut stackFromEnd nicht auf "true" gesetzt (standardmäßig auf "false" gesetzt).

stackFromEnd ist ein Attribut des Managers, nicht die RecyclerView.

In meinem Fall habe ich dies:

<android.support.v7.widget.RecyclerView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/list" 
    app:stackFromEnd = "true" 
    app:layoutManager="LinearLayoutManager" 
</android.support.v7.widget.RecyclerView> 

in Ihrem XML-Code, den Sie nicht das app:layoutManager Attribut haben, so bin ich nicht sicher, was Manager für Sie auf die Inflation erstellt wird.

1

Es scheint zu Android nicht erkennen app:stackFromEnd="true". Vielleicht hast du es falsch plaziert. setStackFromEnd(Boolean) macht den gleichen Job, aber programmgesteuert.

Laut Dokumentation:

public void setStackFromEnd(boolean stackFromEnd)

Kompatibilität Unterstützung für setStackFromBottom(boolean)

und

public void setStackFromBottom (boolean stackFromBottom) 

Hinzugefügt in API Level 1 Wenn der Stapel von unten auf "true" gesetzt ist, füllt die Liste ihren Inhalt beginnend am unteren Rand der Ansicht.

Parameter stackFromBottomtrue die Ansicht der Inhalt an den Unterkante an Pin false die Ansicht der Inhalte der Oberkante diese

Lesen an Pin:

http://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#getStackFromEnd()

http://developer.android.com/reference/android/widget/AbsListView.html#setStackFromBottom(boolean)

+0

Es ist offensichtlich, dass Android 'app: stackFromEnd =" true "' nicht erkennt. Die Frage ist warum? – guness

Verwandte Themen