DiffUtil.Обратный вызов() не работает так же, как notifyDataSetChanged()

#android #android-recyclerview #android-diffutils

Вопрос:

У меня есть список сообщений, содержащий сообщения. И я использовал обычное RecyclerView.Adapter вместо ListAdapter .

Фрагмент чата

 chatViewModel.msgListDisplayLiveData.observe(viewLifecycleOwner, {
    chatAdapter.setChat(it)
})
 

Вот функция для обновления messageList в адаптере.

Адаптация чата

 fun setChat(newMessages: List<Message>) {
    val diffUtil = ChatDiffUtil(messageList, newMessages)
    val diffResults = DiffUtil.calculateDiff(diffUtil)

    messageList = newMessages
    diffResults.dispatchUpdatesTo(this)

    --> Method of using notifyDataSetChanged()
    // messageList = newMessages
    // notifyDataSetChanged()
}
 

Ранее я использовал notifyDataSetChanged() , и элемент списка может быть обновлен мгновенно, но без какой-либо анимации.
Таким образом, я решил использовать DiffUtils() и получил приятную анимацию, когда элемент моего списка был добавлен/удален.

Однако, когда я хочу обновить один из элементов, DiffUtils кажется, что это не имеет никакого видимого эффекта.

С помощью функции notifyDataSetChanged() — можно мгновенно обновить строку. введите описание изображения здесь

Using DiffUtils() — cannot update instantly.
enter image description here

What had I done wrongly? Please advise me.