При обновлении данных в RecyclerView через notifyItemRangeChanged(0, values.size(), -1), список просто зависает и не подает признаков жизни
Метод, в котором это происходит:
private fun addMessage(message: VKMessage) {
val index = searchConversationIndex(message.peerId)
if (index >= 0) {
val conversation = prepareConversation(getItem(index), message)
if (index == 0) {
set(0, conversation)
notifyItemChanged(0)
} else {
val maxPosition = layoutManager.findLastCompletelyVisibleItemPosition() - layoutManager.findFirstCompletelyVisibleItemPosition() + 1
if (index > maxPosition) {
values.removeAt(index)
notifyItemRemoved(index)
values.add(0, conversation)
notifyItemInserted(0)
} else {
values.removeAt(index)
values.add(0, conversation)
notifyItemMoved(index, 0)
}
}
} else {
val conversation = CacheStorage.getConversation(message.peerId)
if (conversation != null) {
values.add(0, prepareConversation(conversation, message))
} else {
val temp = VKConversation().apply {
id = message.peerId
localId = if (VKConversation.isChatId(id)) id - 2000000000 else id
type = if (id < 0) VKConversation.TYPE_GROUP else if (id > 2000000000) VKConversation.TYPE_CHAT else VKConversation.TYPE_USER
lastMessage = message
lastMessageId = message.id
}
values.add(0, temp)
}
notifyItemInserted(0)
}
notifyItemRangeChanged(0, itemCount, -1)
if (layoutManager.findFirstVisibleItemPosition() < 2) {
layoutManager.scrollToPosition(0)
}
}