我正在使用带有回收器视图的列表适配器,现在数据类包含一个变量 isChecked,这用于指示用户是否选择了该变量,代码正在更新列表,因为我可以看到日志(我有出于测试目的而放置)返回当前列表始终在用户单击某个项目时更新,但由于某种原因,UI 中的更改(基于 isChecked 变量)仅在滚动回收器视图或单击其他项目时反映。我放置了一个notifyDataSetChanged来查看它是否强制列表更新并查看更新的视图是否正确并且它有效,但这破坏了使用diff util的整个目的。我的包装数据类中有一个嵌套列表,正在 diff util 中进行比较,如下所示
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<MainDataClass>() {
override fun areItemsTheSame(
oldItem: MainDataClass,
newItem: MainDataClass
): Boolean {
if (oldItem is MainDataClass.Item && newItem is MainDataClass.Item) {
return oldItem.data.id == newItem.data.id
} else if (oldItem is MainDataClass.List && newItem is MainDataClass.List) {
return oldItem.list == newItem.list
} else return false
}
override fun areContentsTheSame(
oldItem: MainDataClass,
newItem: MainDataClass
): Boolean {
if (oldItem is MainDataClass.Item && newItem is MainDataClass.Item) {
return …Run Code Online (Sandbox Code Playgroud)