5

Ho un RecyclerView definito come:app: stackFromEnd per RecyclerView non funziona 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" /> 

codice relativo è comune anche utilizzato uno:

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

Tuttavia quando aggiungo un elemento RecyclerView, non rispetta app:stackFromEnd="true". D'altra parte, se si decommenta e si utilizza layoutManager.setStackFromEnd(true); in modo programmatico, funziona correttamente. Qual è il problema che mi manca? Tutte le idee sono benvenute.

risposta

9

Mi sono imbattuto in qualcosa di simile. Il problema è che quando il RecyclerView è gonfiato, legge l'attributo.

Ma poi si assegna un nuovo LinearLayoutManager creato nel codice java. Questo nuovo gestore non ha l'attributo stackFromEnd impostato su true (il valore predefinito è false).

stackFromEnd è un attributo del gestore, non RecyclerView.

Nel mio caso ho questo:

<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> 

Nel codice XML non si ha l'attributo app:layoutManager quindi non sono sicuro di cosa manager è creato per voi sull'inflazione.

1

Sembra che Android non riconosca app:stackFromEnd="true". Forse lo metti nel posto sbagliato. setStackFromEnd(Boolean) esegue lo stesso lavoro, ma a livello di programmazione.

Secondo la documentazione:

public void setStackFromEnd(boolean stackFromEnd)

il supporto di compatibilità per setStackFromBottom(boolean)

e

public void setStackFromBottom (boolean stackFromBottom) 

Aggiunto in livello API 1 Quando stack from bottom è impostato su true, l'elenco riempie il suo contenuto a partire dalla parte inferiore della visualizzazione.

Parametri stackFromBottomtrue al pin contenuto della visualizzazione al bordo inferiore , false al pin contenuto della visualizzazione al bordo superiore

Leggi questi:

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

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

+0

È evidente che Android non riconosce 'app: stackFromEnd =" true "'. La domanda è: perché? – guness

Problemi correlati