gpt4 book ai didi

android - RecyclerView 在顶部添加项目并继续滚动

转载 作者:搜寻专家 更新时间:2023-11-01 07:44:52 25 4
gpt4 key购买 nike

我有一个带有 RecyclerView 的 fragment 。它可以作为聊天工具使用。

我向后端请求最后 50 条消息,并将它们加载到回收站 View 中

LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);

mAdapter = new ChatMessagesAdapter(recyclerView, messages, getActivity());
recyclerView.setAdapter(mAdapter);
recyclerView.getLayoutManager().scrollToPosition(messages.size()-1);

mAdapter.notifyDataSetChanged();

然后,当我向上滚动时,我使用 OnScrollListener 请求更多消息并加载它们

messages.addAll(0, oldMessages);
mAdapter.notifyDataSetChanged();
mAdapter.setLoaded();
recyclerView.getLayoutManager().scrollToPosition((oldMessages.size()) -1);

但是当我在第一次加载时设置 recyclerView

layoutManager.setStackFromEnd(true);

当我加载旧消息时,滚动将显示的第一个项目(在最后一个之前)移动到底部。

如何在顶部添加旧消息并继续滚动,就像第一次加载时的项目一样?不将焦点移动到底部

最佳答案

使用 notifyItemRangeInserted 而不是 notifyDataSetChanged

使用以下代码更新您的适配器:

public void addList(List<ChatMessage> items) {
chatMessages.addAll(0, items);
notifyItemRangeInserted(0,items.size());
notifyItemChanged(items.size());//Only To update the last top item cause in my case it was the date header so i need to notify it
}

关于android - RecyclerView 在顶部添加项目并继续滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com