2017-10-16 87 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

作品!謝謝 –

相關問題