问题描述
我实现了ListAdapter
,即T是密封类ViewHolderModel
。然后,我尝试实现DiffUtil.ItemCallback
以用作适配器,但遇到了问题。
ViewHolderModel
包含各种数据对象,它们是唯一的ID,有些对象是模棱两可的。
如何实现有效的ItemCallback?
ViewHolderModel(密封类)
sealed class ViewHolderModel {
object Error : ViewHolderModel()
object Footer : ViewHolderModel()
data class Header(
val title: String,val description: String,...
) : ViewHolderModel()
sealed class Item : ViewHolderModel() {
abstract val id: Long
abstract val thumbnail: String
data class Image(
override val id: Long,override val thumbnail: String
...
) : Item()
data class Video(
override val id: Long,override val thumbnail: String
...
) : Item()
data class Sound(
override val id: Long,override val thumbnail: String
...
) : Item()
}
}
ItemCallback
companion object {
val Comparator by lazy {
object : DiffUtil.ItemCallback<ViewHolderModel>() {
override fun areItemsTheSame(oldItem: ViewHolderModel,newItem: ViewHolderModel): Boolean =
???
override fun areContentsTheSame(
oldItem: ViewHolderModel,newItem: ViewHolderModel
): Boolean = oldItem == newItem
}
}
}
我尝试如下将抽象字段(id)添加到ViewHolderModel
,但效果并不理想。有没有比这更好的方法了?
sealed class ViewHolderModel {
abstract val id : Long
object Error : ViewHolderModel() {
override val id: Long
get() = Long.MIN_VALUE
}
object Footer : ViewHolderModel() {
override val id: Long
get() = Long.MIN_VALUE + 1
}
...
// in ItemCallback
override fun areItemsTheSame(oldItem: ViewHolderModel,newItem: ViewHolderModel): Boolean =
oldItem.id == newItem.id
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)