问题

我想在加载活动后滚动到RecyclerView列表的底部。

GENERIC_MESSAGE_LIST = (ArrayList) intent.getExtras().getParcelableArrayList(ConversationsAdapter.EXTRA_MESSAGE);
conversationView = (RecyclerView) findViewById(R.id.list_messages);
conversationView.setHasFixedSize(true);
conversationViewLayoutManager = new LinearLayoutManager(this);
conversationView.setLayoutManager(conversationViewLayoutManager);
conversationViewAdapter = new ConversationAdapter(GENERIC_MESSAGE_LIST, this);
conversationView.setAdapter(conversationViewAdapter);

conversationView.scrollTo(...)抛出了一个关于在RecyclerView中不受支持的例外,并且conversationView.scrollToPosition(...)似乎什么也没做。

在上面的代码块之后,我补充道

conversationView.scrollToPosition(GENERIC_MESSAGE_LIST.size() + 1)

这不起作用。在GENERIC_MESSAGE_LIST中有30个元素。


#1 热门回答(266 赞)

我正在看这篇文章找到答案,但是......我认为这篇文章中的每个人都面临着与我相同的情景:scrollToPosition()被完全忽略,原因很明显。

我在用什么?

recyclerView.scrollToPosition(items.size());

... whatWORKED

recyclerView.scrollToPosition(items.size() - 1);

#2 热门回答(157 赞)

只需设置setStackFromEnd=truesetReverseLayout=true即LLM将从最后布局项目。

这两者的区别在于,setStackFromEnd将设置视图以显示最后一个元素,布局方向将保持不变。 (因此,在从左到右的水平Recycler View中,将显示最后一个元素,向左滚动将显示较早的元素)

setReverseLayout将改变适配器添加的元素的顺序。布局将从最后一个元素开始,该元素将是LTR Recycler View中最左侧的元素,然后向右滚动将显示较早的元素。

样品:

final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setReverseLayout(true);
_listView.setLayoutManager(linearLayoutManager);

有关详细信息,请参阅documentation


#3 热门回答(40 赞)

我知道最近在这里回答,如果有人想知道解决方案如下

conversationView.smoothScrollToPosition(conversationView.getAdapter().getItemCount() - 1);

原文链接