2017-10-16 44 views
1

我有一个带有RecyclerView的片段。它用作聊天。RecyclerView在顶部添加项目并继续滚动

我请求我的后端的最后50条消息,我的回收站视图加载它们

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

当我是劳广告旧的消息滚动移动第一项显示(最后一个)到底部。

如何在顶部添加旧消息并继续滚动,如果物品在第一次装入时存在?如果没有将焦点移到底部

回答

3

使用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 
} 
+0

作品!谢谢 –

相关问题