setReverseLayout 中的 RecyclerView 滚动到顶部(或底部)

Jon*_*ght 5 android android-recyclerview

为可能具有误导性的标题道歉,但我不知道如何措辞。如果其他人认为他们可以想出更好的东西,请随时进行编辑。

我有一个用 Firebase 记录填充的 RecyclerView。为了使最近的记录显示在列表的顶部,我已将我的 RecvlerView 设置为setReverseLayout(true)setStackFromEnd(true)按照此处的建议。当项目数量适合屏幕空间时,这非常有效 - 其余项目平滑向下滚动,为淡入的新项目提供空间,如下所示。

好的

问题是当现有项目占据所有屏幕空间时,新项目被添加到其他项目的“上方”并且 RecyclerView 有效地扩展到屏幕顶部上方,因此要查看新项目,我需要拉动或滚动手动列出。下面是另一个 GIF;

坏的

我怎样才能克服这个问题?

小智 6

final int SCROLLING_UP = -1;
boolean scrollToNewTop = !recyclerView.canScrollVertically(SCROLLING_UP);
//TODO update adapter here
adapter.notifyItemInserted(adapter.getItemCount() - 1);
if (scrollToNewTop) {
    recyclerView.scrollToPosition(adapter.getItemCount() - 1);
}
Run Code Online (Sandbox Code Playgroud)

如果您处于最顶端,这将使您向上滚动,并且如果您处于中间位置,则可以保持原样,从而避免烦人的跳跃。


小智 1

这可能有帮助:

adapter.notifyItemInserted(position);
recyclerView.scrollToPosition(position);
Run Code Online (Sandbox Code Playgroud)