小编Azi*_*asi的帖子

Diff util 不更新回收器视图中的项目 UI

我正在使用带有回收器视图的列表适配器,现在数据类包含一个变量 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)

android kotlin

3
推荐指数
1
解决办法
2759
查看次数

标签 统计

android ×1

kotlin ×1