app: stackFromEnd для RecyclerView не работает в xml?

у меня есть RecyclerView определено как:

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

связанный код также часто используется один:

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

однако, когда я добавить элемент RecyclerView, он не уважает app:stackFromEnd="true". С другой стороны, если я раскомментирую и использую layoutManager.setStackFromEnd(true); программно, он отлично работает. В чем проблема, которую я упускаю? Любые идеи приветствуются.

2 ответов


я столкнулся с чем-то подобным. Проблема в том, что когда RecyclerView раздувается, он читает атрибут.

но затем вы назначаете новый LinearLayoutManager, который создается в коде java. У этого нового менеджера нет атрибута stackFromEnd, установленного в true (по умолчанию false).

stackFromEnd является атрибутом менеджера, а не RecyclerView.

в моем случае у меня есть это:

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

в вашем xml-коде у вас нет app:layoutManager атрибут, поэтому я не уверен, что менеджер создан для вас по инфляции.


кажется, Android не распознает app:stackFromEnd="true". Может, ты поставил его не на то место. setStackFromEnd(Boolean) делает ту же работу, но программно.

согласно документации:

public void setStackFromEnd(boolean stackFromEnd)

поддержка совместимости для setStackFromBottom(boolean)

и

public void setStackFromBottom (boolean stackFromBottom)

добавлен в уровень API 1, когда стек снизу установлен в true, список заполняет его содержимое, начиная с нижней части представления.

параметры stackFromBottom true чтобы прикрепить содержимое представления к нижний край, false чтобы прикрепить содержимое представления к верхнему краю

читать это:

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

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