问题标签 [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 投票
4 回答
10889 浏览

java - 我的 DiffUtil 实现有什么问题?

更新:问题之一已解决:现在updateList已解决,问题是我定义mAdapterRecyclerView.Adapter而不是MyAdapter. 但是现在即使我正在获取数据,列表上也没有显示任何内容,它是空的

--------------------原帖--------

我想更新我的RecyclerView使用DiffUtil以防止重复。

我有 4 个类:用户类、Activity我设置数据的类、Adapter类和DiffUtil类。我不确定我是否正确地结合了所有这 4 个。

这是用户类:

这就是我动态设置数据的方式(我不断Json从服务器获取包含要显示的用户 ID 的新数组,然后从Firebase存储中设置用户图像):(这是一个由 onClick 侦听器调用的函数:)

这是来自片段的方法调用:

这是功能:

这就是我的DiffUtil班级的样子:

这是我的适配器:

我不确定我是否正确组合了所有类(我第一次使用DiffUtil),我也得到了cannot resolve method updateList(?)

我究竟做错了什么?

这就是我在 Fragment 中定义 mAdapter 的方式:

0 投票
1 回答
222 浏览

android - 如果使用 DiffUtil,hasStableIds 和 getItemId 有什么意义吗?

我们使用DiffUtil.CalculateDiff自定义DiffUtil.Callback来处理对基础数据的更改。

  • 我们元素的标识相当复杂,这就是我们使用自定义相等检查areContentsTheSameareItemsTheSame.

  • 但是,适配器有两个东西hasStableIdsgetItemId.

问题是getItemId返回 along并且我们元素的标识不能以long稳定的方式合并为 a (尽管考虑到我们在 diffutil 回调中的自定义相等检查,否则稳定。

问题是这样的:

在这种情况下如何处理,hasStableIds以及getItemId当 DiffUtil 将更改推送到适配器时是否使用了这些?

0 投票
1 回答
797 浏览

android - Android DiffUtil inconsistency exceptions when using custom added views like i.e. for empty lists

I need help with the DiffUtil for RecyclerView Adapter. I have made a Custom Adapter with the possibility to add custom Views like a loading view or empty view etc. Everything works fine without using DiffUtil but when I use it I have sometimes an inconsistency detected exception. I think the problem lies within the getItemCount() method but I'm not sure. If someone could give me an advise it would be very helpful. Here is the code I'm using.

This is my DiffUtil Adapter Class:

And this is my Difference Calculator Class:

From what I can read from the stacktrace it seems that the adapter or RecyclerView receives a wrong position for the last item. It is always trying to get a Viewholder for the last item with position == itemCount and of course this is not working because the positions start at 0. So why doesn't it receive position == (itemCount - 1) for the last item?

0 投票
4 回答
2216 浏览

android - RecyclerView 滚动到顶部,AsyncListDiffer 不起作用

我正在使用RecyclerViewwith AsyncListDiffer(计算和动画新旧项目之间的差异,全部在后台线程上)。

我有一个按钮来对列表进行排序。在我对其进行排序并将其重新设置为RecyclerView使用后,mDiffer.submitList(items);我还调用了recyclerView.scrollToPosition(0)or ( smoothScrollToPosition(0)),但它没有任何效果。

我认为这种行为是意料之中的,因为AsyncListDiffer在调用时可能仍在计算差异scrollToPosition(0),所以它没有效果。此外,默认情况下AsyncListDiffer不会滚动回顶部,而是将 RecyclerView 保持在相同的状态。

但是我如何告诉它在完成RecyclerView后滚动到顶部AsyncListDiffer并更新它?

0 投票
8 回答
11545 浏览

android - 如果我提交具有不同项目顺序的相同列表,ListAdapter 不会刷新 RecyclerView

我正在使用RecyclerViewwith ListAdapter(它使用AsyncListDiffer在替换列表时计算和动画更改)。

问题是,如果我submit()列出了一些列表,然后重新排序该列表,submit()同样,什么也没有发生。

我如何强制ListAdapter评估这个新列表,即使它是“相同的”(但顺序已经改变)?

新发现:

我检查了submitList()的源代码,并在开始时进行了检查:

我认为这是问题所在。但是如何克服呢?我的意思是,开发人员肯定考虑过提交不同的有序列表吗?

0 投票
2 回答
1610 浏览

android - 带有 DiffUtil (ListAdapter) 的 RecyclerView 会阻塞 UI 线程

我正在使用RecyclerViewwith ListAdapter(它使用AsyncListDiffer在替换列表时计算和动画更改)。

问题是,有时当我调用submit()用新数据更新 RecyclerView 时,它会阻塞整个 UI 线程 5-10 秒。这发生在我恢复活动(从主屏幕返回)后,但我不确定这是否是原因。

我确定

  • 提交的列表具有良好的预期数据
  • 使用recyclerView.setHasFixedSize(true);,因为它占用了所有屏幕空间

这是设备处于无响应状态时的线程转储(参见 raw):

这是我的 DiffUtil 回调:

这里有什么问题?

0 投票
0 回答
260 浏览

android - RecyclerView DiffUtil 需要手动更新数据吗?

现在我在我的项目中发现了一个错误

这是我在适配器中的差异代码,您可以看到我清除了旧列表并更新了新列表。

但我在视图中使用数据并在视图中使用它设置标签。

当我在视图中将旧数据设置为标签时,我对列表进行比较,因为这个 diffUtil 返回 true,所以视图也在他的标签中处理旧数据,但是我总是在比较时更新适配器列表,所以当我使用时adapter.list.getindex(data)我得到-1 因为视图标签是旧数据,而我的适配器列表必须更新新列表,即使旧列表数据视图 == 新列表。

当我删除时list.clear() list.addAll(newList),差异无法成功,有人可以告诉我为什么吗?我该如何解决这个问题?

0 投票
1 回答
869 浏览

android - 如何更新 RecyclerView 中的图像?

我有一个 RecyclerView 图像,用户可以直接在 RecyclerView 本身中进行编辑。

编辑部分很好,效果很好。它是在覆盖图像的位图上完成的,然后将任何更改保存到图像文件中。一旦用户滚动recyclerview,位图就会被破坏并变得不可见。

问题是,用户所做的任何更改在滚动时都不可见。他们滚动旧图像,而不是编辑图像。他们必须离开回收站并回到其中才能看到变化。

那么如何强制 RecyclerView 重新加载刚刚保存的图像。我在我的适配器中使用 Glide,你可以看到我有基于图像保存时间的缓存。

有没有办法通知 recyclerview 图像已更改,并强制重新加载图像?

我在适配器上使用 DiffUtil。我的理解是,当您使用 DiffUtil 时,我不需要使用 notifyDataSetChanged()。但我不明白您如何通知图像更改。

我不知道 Diff Callback 是否是问题所在。对于它的价值,它就在这里。它不查看图像文件本身,只查看图像文件的名称。可能是因为名称没有改变,所以图像没有更新。但我不想在每次编辑时都更改文件的名称。

谢谢!

约翰

0 投票
2 回答
1151 浏览

xamarin.forms - 为什么我的 diffutils 不更新我在后台的位置

我正在使用 DiffUtils 来更新我的 Recyclerview。视觉上有效,但单击一个项目会将其返回给我一个与我单击的项目不匹配的位置

我使用了能够解决位置问题的 NotifyDataChange。但从视觉上看,最后一项配置错误。

我尝试使用能够解决位置问题的 NotifyDataChange。但从视觉上看,最后一项配置错误。

我的适配器:

我的困难:

我的活动:

更新项目,删除,添加或移动项目。根据我的要求。

0 投票
1 回答
483 浏览

android - Android Room - 如何仅获取新数据?

Dao在数据库中插入一些messages后,这个方法的结果是什么:

1 -存储在数据库中的所有 messages 将在此更改后发出

或者

2 -更改后只会发出DIFFERENCE beetwen new 和 old s?message

在哪些文件中指定?如果首先,我应该怎么做才能有所作为 - 类似DiffUtils或有其他方法?

PS如果我删除一些消息怎么办?