【问题标题】:LiveData, DiffUtil and object referencesLiveData、DiffUtil 和对象引用
【发布时间】:2020-03-10 15:31:43
【问题描述】:

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 会注意到差异。有没有更好的?

【问题讨论】:

    标签: android android-livedata mutablelivedata android-diffutils


    【解决方案1】:

    也许这会对你有所帮助

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

    您可以根据自己的要求稍作修改 如果您想通过 ids 或其他方式进行检查

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多