notifyItemInserted 再次渲染整个列表

notifyItemInserted renders the entire list again

我有以下方法 -

  private fun initRoomObserving() {
        dashboardViewModel = ViewModelProvider(this).get(DashboardViewModel::class.java)
        dashboardViewModel.getAllMessagesEntities().observe(this, Observer { receivedMessageList ->
            receivedMessageList.forEach {
                if (!userPhoneNumber.equals(it.senderUsername)) {
                    it.isReceiver = true
                }
                if (!messagesList.contains(it)) {
                    messagesList.add(it)
                }
            }
            conversationAdapter.notifyItemInserted(messagesList.size)
            conversationAdapter.notifyItemRangeChanged(messagesList.size - 1,messagesList.size)

        })
    }

出于某种原因,每次添加新实体时都会再次呈现整个列表,即使我明确地 notifyItemInserted 而不是 notifyDataSetChanged

为什么会这样,我错过了什么?

notifyItemRangeChanged 的秒参数将计数作为值,因此由于更改项的值始终为 1,因此传递 1 而不是 messagesList.size 作为:

conversationAdapter.notifyItemRangeChanged(messagesList.size - 1, 1)

此外, 可以是可变的,它可以跟踪可用于 notifyItemRangeChanged 的已更改项目的数量,当您将有不止一项要更新时。