问题标签 [android-diffutils]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
514 浏览

android - 对记录数据进行更新时,不会触发 Android Fragment LiveData 观察器

我试图弄清楚为什么getAllGoals()当我更新记录时 LiveData 观察者不会立即在片段中触发。但是,只有在使用底部选项卡导航切换到另一个片段然后返回到原始片段后,才会调用观察者。

有问题的片段:MyGoalsFragment.java

MyGoals 视图模型:

存储库:

DAO 类:

我在 2 个片段中有这个问题,还有 2 个其他片段在完全相同的实现中没有这个问题。为什么在我更新 MyGoals 片段中的记录后没有立即调用观察者?

0 投票
1 回答
158 浏览

java - 如何在 Kotlin/Java 中对相同的方法调用进行排队

我使用 DiffUtil 计算 RecyclerView 中的数据变化。计算是在调度程序线程上使用 RxJava 异步完成的,如下所示:

连续调用该函数时,大数据集的计算将最后完成

有没有办法将方法调用排队并等待执行完成,然后再执行另一个?

0 投票
2 回答
222 浏览

android - RecyclerView 设置数据库中单个数据更改时的所有项目

我正在使用 LiveData 从数据库中获取 30 个项目,如下所示:

每个回收站视图项都有一个点赞按钮,并且我在适配器中有一个接口:

当点击like按钮时结束我正在更新数据库中的单个项目。当我使用 LiveData 时,它正在获取更新的 30 个项目。我正在使用观察方法设置该数据:

问题:

  • 当单击一个赞按钮时,回收器视图正在刷新其所有内容并滚动到第一个项目。

编辑: submitList(list: List) 方法:

DiffUtill 类:

适配器类:

我已经覆盖了equals()我的 Data 类的方法:

0 投票
1 回答
560 浏览

android - 使用分页适配器的嵌套recyclerview(分页3)在滚动后显示错误的图像

如何解决滚动后发生变化并显示错误图像的子适配器图像?

这是我的代码

父数据类

子数据类

对于作者和评论,我只取自父数据类

父适配器

}

子适配器

}

滚动前

首次加载时,第一个位置数据会显示相应的图像

滚动前

稍微滚动后

第一个位置数据中的图像更改为下一个数据中的图像

稍微滚动后

滚动到最后一个数据/页面

最后一张图片显示了不合适的图片

滚动到最后一个数据/页面

*笔记

  • 只有5个数据,只有第一个和最后一个数据包含图像
  • 第一个位置数据中的图像应该是人物图像,最后一个位置图像应该是粉红色图像
  • 我使用Coil作为图像加载器,并在加载图像之前使用了 ImageView.clear() 方法

提前谢谢,如果我的英语不好,对不起。我不是母语人士

0 投票
2 回答
1641 浏览

android - 带有列表的 LiveData

我想观察一个 MutableList,因此当从 MutableList 添加或删除项目时,DiffUtil 将更新 RecycerView。我认为更新列表的最佳方法是使用 LiveData,但我无法在 MutableList 中添加或删除项目。

我一直在关注下面的这个代码实验室来尝试帮助我。

https://codelabs.developers.google.com/codelabs/kotlin-android-training-diffutil-databinding/#4

主要活动

用户数据类

适配器

这是我目前的代码,我无法从列表中添加或删除项目,并且 ViewLifecycleOwner 未定义。

0 投票
1 回答
982 浏览

android - RecyclerView,带有 DiffUtil 和 LiveData

我已经坚持了几天,并且可以真正使用一些帮助和了解如何使用 DiffUtil 设置 RecylerView(RV),似乎无论我尝试什么我都无法更新 RV。我将介绍我所拥有的,并希望有人可以阐明我做错了什么。

应用启动

  • 创建视图模型,
    • 然后将 LiveDataList 填充到 ViewModel 中。
  • RV 已实例化
    • LayoutManager 和 ListAdapter 应用于 RV。
  • ItemTouchHelper 附加到 RecyclerView 允许在向左滑动时从 LiveDataList 中删除项目。
  • 观察LiveDataList,我的理解是当列表发生变化时,观察者会将列表提交给AdapterList,如果原来提交的列表和修改后的列表有差异,AdapterList会更新回收站视图。

为什么从列表 LiveDataList 中添加或删除项目时不调用观察者进行更新。

数据类:这是非常基本的,在这里发生的事情并不多。

ViewModel:MyViewModel 只存储 MutableLiveDat

RecycleView 适配器

当从 LiveData 列表中删除或添加项目时,观察者会将修改后的列表传递给 ListAdapter,可以做什么?

StackTrace 包括索引出站。

0 投票
1 回答
289 浏览

android - 具有项目列表的对象的 Diffutils

希望有人可以帮助我。您将如何将 diffutils 用于具有对象列表的对象。因此,举个简单的例子,可能没有意义,但可以得到一个更好的主意。

我的适配器数据是锻炼列表。所以我不确定我会如何比较健身课上的练习。我想我需要在 areContentsTheSame 中一一比较练习?或者有没有更简单的方法来完成这个

任何帮助,将不胜感激。谢谢!

0 投票
0 回答
193 浏览

android-recyclerview - DiffUtil areContentsTheSame() 在 RecycleViewAdapter 中的 List 内容更新后总是返回 true

这是我的 RecyclerView 适配器类。单击列表 UI 中的项目应将特定项目(如背景黑色变为白色)更改。单击一个项目后,我将 UI 类中项目 0 的状态更改为 1,基于该状态 UI 应该更改项目。但在 diffUtil areContentTheSame() 内部返回 true。

}

这是提交适配器列表的 UI 类。在 doClickTimeSlot() 下方,我正在更新项目的状态。

0 投票
1 回答
558 浏览

android - DiffUtil.ItemCallback areItemsTheSame() 方法检查项目两次

我向/list.php?page=1发送请求并使用 Paging 3 组件在 UI 中显示数据。

在第一个请求中,areItemsTheSame(new, old)方法什么也不做。没有登录Logcat。

然后我用 SwipeRefreshLayout 刷新数据并请求发送相同的 api (/list.php?page=1)。

DiffUtil.ItemCallback areItemsTheSame(new, old)方法检查项目两次。一次是降序,然后是升序。

日志猫:

I: newItem: 3308 = oldItem: 3308 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3305 = oldItem: 3305 I:检查:正确
I:新项目:3304 = oldItem:3304 I:检查:正确
I:新项目:3303 = oldItem:3303 I:检查:正确
I:新项目:3302 = oldItem:3302 I:检查:正确
I: newItem:3301 = oldItem:3301 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3300 = oldItem:3300 I:检查:真
I:newItem:3301 = oldItem:3301 I :检查:真
I:新项目:3302 = oldItem:3302 I:检查:真
I:新项目:3303 = oldItem:3303 I:检查:真
I:新项目:3304 = oldItem:3304 I:检查:真
I: newItem: 3305 = oldItem: 3305 I: check: true
I: newItem: 3306 = oldItem: 3306 I: check: true
I: newItem: 3307 = oldItem: 3307 I: check: true
I: newItem: 3308 = oldItem: 3308我:检查:真

空缺片段: 在此处输入图像描述

适配器: 在此处输入图像描述

视图模型: 在此处输入图像描述

数据源: 在此处输入图像描述

0 投票
6 回答
5147 浏览

android - RecyclerView 列表项视图未更新(使用 DiffUtil.ItemCallback)

解决了

RV - 回收站视图

我在警报对话框中有一个 RV。RV 适配器使用 DiffUtil.ItemCallback 扩展 ListAdapter。适配器列表每 500 毫秒使用倒数计时器更新一次(检查列表项是否已下载)。

问题是,列表已更新并使用新数据提交给适配器,但列表项视图并未根据提供的新数据进行更新,如下所示。我正在使用数据/视图绑定来更新列表项视图。

RV 有时会在滚动时更新项目视图。

PS:RV 是 NestedScrollView 的孩子

这就是它现在的工作方式

适配器代码

列表项查看代码

绑定适配器函数