LinearLayoutManager setReverseLayout() == true 但 items 从底部堆叠

这似乎是一个简单的解决方案,但似乎设置

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

似乎还将项目设置为从底部堆叠

我试图设置为false,但这没有做任何事情,什么是颠倒项目顺序但仍然从顶部填充的最佳方法?我应该改用自定义比较器类吗?我希望这比创建另一个类更容易。setStackFromBottom


答案 1

文档设置反转布局

用于反转项目遍历和布局顺序。这类似于 RTL 视图的布局更改。设置为 true 时,第一项布局在 UI 的末尾,第二项布局在它之前,依此类推。对于水平布局,这取决于布局方向。设置为 true 时,如果 RecyclerView 是 LTR,那么它将从 RTL 布局,如果 RecyclerView} 是 RTL,它将从 LTR 布局。如果您正在寻找 与 完全相同的行为,请使用setStackFromBottom(boolean)setStackFromEnd(boolean)

因此,尝试在 LinearLayoutManager 实例上使用 setStackFromEnd(boolean),

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

答案 2

接受的答案效果很好,我经历了一个艰难的过程,因为我遇到了错误。can not resolve method setReverseLayout

然后在寻找解决方案后,我发现那里有一个愚蠢的错误。我使用的是代替.RecyclerView.LayoutManagerLinearLayoutManager

所以我想为了消除这里的困惑,我需要把它作为一个答案。

不要使用 RecyclerView.LayoutManager 而不是 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);