При обновлении данных в 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)
        }
    }

Ответы (0 шт):