2017-10-16 23 views
1

私はRecyclerViewで断片を持っています。チャットとして機能します。RecyclerViewは上に項目を追加してスクロールを続行します

私は私のバックエンドへの最後の50件のメッセージを要求し、私は私が上にスクロールするとき、私はOnScrollListenerで複数のメッセージを要求し、私は彼らに

messages.addAll(0, oldMessages); 
mAdapter.notifyDataSetChanged(); 
mAdapter.setLoaded(); 
recyclerView.getLayoutManager().scrollToPosition((oldMessages.size()) -1); 
をロードし、

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

その後リサイクルビューでそれらを読み込みます

しかし、最初のロードでrecyclerViewを設定すると、

layoutManager.setStackFromEnd(true); 

広告は、スクロールが最初に表示された項目(最後の前)を下に移動する古いメッセージです。

古いメッセージを上に追加して、アイテムが最初の読み込み時にそこにあったようにスクロールを続けるにはどうすればよいですか?下

答えて

3

にフォーカスを移動せずに使用代わりのをnotifyDataSetChangedをnotifyItemRangeInserted。あなたのアダプタを更新するためのコードの下

用途:

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

作品!ありがとうございました –

関連する問題