notifyItemInserted снова отображает весь список - PullRequest
1 голос
/ 22 апреля 2020

У меня есть следующий метод -

  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

Почему это происходит и чего мне не хватает?

1 Ответ

1 голос
/ 23 апреля 2020

Параметр секунд для notifyItemRangeChanged принимает значение в качестве значения, так как значение элемента изменений всегда равно единице, поэтому передайте 1 вместо messagesList.size как:

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

Дополнительно, someCount может быть переменной, которая может отслеживать количество измененных элементов, которые можно использовать для notifyItemRangeChanged, когда у вас будет более одного элемента для обновлений.

...