如何滚动到回收器视图的底部?滚动到位置不起作用

2022-08-31 06:36:38

我想在加载活动后滚动到 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)

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


答案 1

我正在看这篇文章来找到答案,但是...我想这篇文章上的每个人都面临着和我一样的场景:被完全忽视了,原因很明显。scrollToPosition()

我用的是什么?

recyclerView.scrollToPosition(items.size());

...什么有效

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

答案 2

只需设置 setStackFromEnd=truesetReverseLayout=true,以便 LLM 将从 end 布局项目。

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

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

样本:

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

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


推荐