提问者:小点点

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


加载活动后,我想滚动到回收视图列表的底部。

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

talationView. scrollTo(…)抛出一个关于RecyclerView不支持的异常,并且talationView.scrollToPopse(…)似乎什么都不做。

在上面的代码块之后,我添加了

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

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


共3个答案

匿名用户

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

我用的是什么?

recyclerView.scrollToPosition(items.size());

…什么奏效了?

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

匿名用户

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

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

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

样品:

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

详见留档。

匿名用户

我知道现在回答已经很晚了,但是如果有人想知道下面的答案

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