如何滚动到 RecyclerView 的底部? scrollToPosition 不起作用

新手上路,请多包涵

我想在加载活动后滚动到 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 个元素。

原文由 waylaidwanderer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 983
2 个回答

只需设置 setStackFromEnd=truesetReverseLayout=true 以便 LLM 将从末尾开始布局项目。

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

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

样本:

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

有关详细信息,请参阅 文档

原文由 yigit 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

我用的是什么?

 recyclerView.scrollToPosition(items.size());

… 什么 起作用 了?

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

原文由 Roc Boronat 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题