LiveData, DiffUtil и ссылки на объекты - PullRequest
0 голосов
/ 10 марта 2020

Существует LiveData, который представляет собой список пользователей:

val users: MutableLiveData<List<User>>

Затем он обновляется:

val usersValues = users.getValues()
val user = usersValues[0]
user.name = "new-name"
users.post(usersValues)

И DiffUtil не видит другого, потому что User - это тот же объект, поэтому он просто обновляется внутри Adapter.

fun areContentsTheSame(int a, int b): Boolean {
    val oldUser //User@666
    val newUser //User@666
    return oldUser.id == newUser.id || oldUser.name == newUser.name
}

Одним из решений является создание нового экземпляра или копии, тогда DiffUtil заметит разницу. Есть что-нибудь лучше?

1 Ответ

0 голосов
/ 10 марта 2020

Может быть, это поможет вам

override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean
        = oldList[oldItemPosition].id == newList[newItemPosition].id

Вы можете изменить немного в соответствии с вашими требованиями, если вы хотите проверить по идентификаторам или что-то еще

...