10

我有一个 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);编程方式使用,它工作正常。我缺少什么问题?欢迎任何想法。

4

2 回答 2

18

我遇到了类似的事情。问题是,当 RecyclerView 膨胀时,它会读取属性。

但随后您将分配一个在 java 代码中创建的新 LinearLayoutManager。这个新管理器没有将 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属性,因此我不确定在通货膨胀时为您创建了哪个管理器。

于 2016-04-16T06:30:56.697 回答
2

安卓好像认不出来app:stackFromEnd="true"。也许你把它放错了地方。setStackFromEnd(Boolean)做同样的工作,但以编程方式。

根据文档:

public void setStackFromEnd(boolean stackFromEnd)

兼容性支持setStackFromBottom(boolean)

public void setStackFromBottom (boolean stackFromBottom)

在 API 级别 1 中添加 当 stack from bottom 设置为 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)

于 2015-12-15T18:20:59.157 回答