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

android - 将 Recyclerview 与 DiffUtil.ItemCallback 一起使用不会滚动到顶部?

我搜索项目,每次从服务器获取时,当我搜索“o”时它会工作,然后“ot”它会再次工作,作为“o”搜索的结果,我假设有 20 个项目,以防万一“ot”我有 10 个项目是这 20 个项目的一部分,我确实在 EditText 中删除了 t 它仅显示 20 个项目 recyclerview 滚动指示器在中间 这是我的 diffUtil 代码

在这里你可以看到我拍摄的视频 https://drive.google.com/drive/folders/1ia5y9TtL0PSAM1M4hVBILWcdSK1BDyKI?usp=sharing

0 投票
5 回答
3630 浏览

android - DiffUtil ItemCallback areContentsTheSame() 在更新 ListAdapter 上的项目后始终返回 true

在使用 ListAdapter 时,我注意到在更新项目后DiffUtil.ItemCallback areContentsTheSame()方法总是返回 true。调试代码我发现旧项和新项完全一样(旧状态消失了)。因此,没有调用ListAdapter onBindViewHolder()方法来更新列表中的相应行(只有项目的顺序通过漂亮的动画进行了更改)。

检查 Stackoverflow 上的其他问题似乎是许多开发人员面临的常见问题:

ListAdapter 未更新 reyclerview 中的项目

编辑内容时 ListAdapter 不更新

DiffUtil.Callback 未按预期工作

Recyclerview + Listadapter 中的项目不会在更新时重绘

具有 DiffUtil.ItemCallback 的 ListAdapter 始终认为对象相同

向 RecyclerView ListAdapter 提交新列表时,差异检查始终为 areContentsTheSame() 返回 true

但是,上述答案(如果有的话)都没有提供正确的解决方案。

它对我有用的唯一方法是每次观察者发出新结果时调用 ListAdapter 上的notifyDataSetChanged() 。

但是,如果通过强制 RecyclerView 重绘其内容(到目前为止它已显示的所有项目)而放弃了您可以获得的所有出色性能,那么使用 ListAdapter 和 submitList() 通知更改的全部意义是什么?

  1. notifyDataSetChanged()

即使它有效,但如果您决定首先使用 ListAdapter,肯定不是正确的方法。

  1. viewModel.getObjects().observe(this, listOfObjects -> listAdapter.submitList(new ArrayList<>(listOfObjects)));

没用。

更新列表中的项目后,我希望看到 UI 上发生的相应更改(不仅是排序顺序)对应的行如预期的那样。

0 投票
3 回答
8334 浏览

android - 如何使用 DiffUtils 更新 RecyclerView 中的列表?

使用 DiffUtil ItemCallback 时,如何使用 DiffCallback 在 RecyclerView 中加载 newList。

当用户选择我希望 RecyclerView 更新的不同尺寸时,我想为用户提供从数据库返回不同尺寸列表的选项。

RecyclerViewAdatper

WordsDiffCallBack

我希望 RecycelView 在用户更改列表大小时自动更新。如何从 ListAdapter 调用旧列表,甚至会更新 RecyclerView

0 投票
1 回答
524 浏览

android-recyclerview - ItemDecoration 底部间距在添加新项目时未更新

我的 recyclerview 有一个 SpacingDecoration,它将在列表中的最后一项之后添加一些额外的间距。

这是我的间距装饰

这很好用。

但是当在列表底部添加一个新项目时,问题就开始了。

我正在使用 DiffUtils 来更新列表。

当列表更新并向列表添加新项目时,它会在底部间距 70 Dp 之后添加新项目。

希望你能理解我的问题。

我想添加最后一个新项目,以便最后一个项目和它之前的项目之间的间距减少到十二Dp。

请帮忙,因为我只是一个初学者

0 投票
0 回答
48 浏览

android - 实时数据列表 r 不使用 DiffUtil 方法更新

我使用 google 建议使用 diff utils 创建我的回收站视图,但 diff utils 没有使用我的 livedata 列表更新我已经尝试了一切

我的模型课

我的 Recyclerview 适配器

主要片段

它只是观察何时将新数据添加到房间数据库,但当我删除时不会计算列表没有任何反应,我将不胜感激

0 投票
0 回答
1422 浏览

kotlin - 带有 diffutil 的 recyclerview 中的 submitList() 导致 recyclerview 闪烁

我有一个从远程源更新的recyclerview,所以它工作得很好,唯一令人讨厌的是,当屏幕被拉动以进行刷新并触发获取请求时,即使适配器中没有任何变化,recyclerview 也会更新导致屏幕闪烁,这很烦人。

我尝试弄乱 diffutils 但没有取得任何结果

在我的主要片段中:

紧随其后的是一名观察员

我的适配器:

最后是我的 diffutilCallback 类:

0 投票
1 回答
463 浏览

android-studio - behavior explanation: Using LiveData to update adapter with DiffUtil

I am updating my recyclerview by using LiveData as below:

And I am using a FloatActionButton to change the value of my MutableLiveData as below:

All the data gets changed and onChanged is called as expected, but it only updates my recyclerview when I enable the adapter.notifyDataSetChanged();

If I create a new ProductsObject inside the FAB and submit a new list, the recyclerview gets updated without calling adapter.notifyDataSetChanged(); as below:

I appreciate if anyone could explain why.

Here is my adapter:

And here is my ViewModel:

0 投票
1 回答
884 浏览

android-recyclerview - 使用 AsyncListDiffer 提交相同的列表,但回收站视图总是自动滚动到顶部

我尝试使用 AsyncListDiffer 提交相同的列表,但回收器视图总是自动滚动到顶部。当我调试时,在调用 areItemsTheSame 方法之前调用 submitList 后,我​​看到 recyclerview 自动滚动到顶部

TestPlaceUi 是数据类,不会覆盖 equal 和 hashcode。

0 投票
2 回答
852 浏览

android - android在使用DiffUtil时更改RecyclerView中奇数行的背景颜色

我有一个 RecyclerView 并且每个奇数行都有不同的背景颜色。我尝试添加DiffUtil以加快更新速度,如下所示:

问题是,当新项目插入列表时,偶数行和奇数行的背景颜色显示不正确,如下所示:

在此处输入图像描述 背景颜色是随机设置的,不会显示为交替的偶数/奇数。我能做些什么来解决这个问题?

0 投票
1 回答
198 浏览

android - 当数据不是从索引 0 开始时使用 DiffUtil

我的 RecyclerView 中的项目结构如下:

我的数据库会自动向 RecyclerView 发送更新。使用 DiffUtil 时,我删除了索引 3 处的项目。在索引 2 处的数据库项目中,DiffUitl Dispatcher 正在删除该项目。我认为这是由于 DiffUtil 调度程序不知道我的项目被一个索引“偏移”。我怎样才能解决这个问题?