问题标签 [android-asynclistdiffer]

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 回答
2216 浏览

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

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

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

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

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

0 投票
2 回答
1132 浏览

android - AsyncListDiffer onAfterSubmitList 监听器

recyclerView.getLayoutManager().smoothScrollToPosition(recyclerView,null,0)只在mDiffer.submitlist(list)完成“差异化”并对列表更新/更改进行动画处理后才尝试调用。

是否有onAfterSubmitList(Callback callback)我可以用来实现此目的的 AsyncListDiffer 功能?

如果没有,有没有办法找出什么时候submitList()完成它的任务,这样我就可以把我scrollToPosition(0)的放在那里了?

0 投票
1 回答
884 浏览

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

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

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

0 投票
2 回答
4646 浏览

android - AsyncListDiffer 没有更新 recyclerview

我有一个 RecyclerView 和一个使用AssyncListDiffer的适配器。我遇到的问题是,当 LiveData 发生更改时,recyclerview没有更新。观察者收到通知,但列表没有更新。

这是我的适配器:

我使用“ submitList() ”提交新列表。但它不起作用

我在网上寻找解决方案,基本上有两种选择:

  1. submitList函数中,调用 AssyncListDiffer 的“submitList”两次,如下所示:

    /li>
  2. 第二个选项是使用ListAdapter并像这样覆盖“submitList”函数:

第一个解决方案有效,但每当我更新它时,recyclerview 就会闪烁。覆盖该方法的第二种解决方案对我不起作用。

几天来我一直在尝试解决这个问题,但我无法让它工作。另外,我不想使用 notifyItemChanged() 或 notifyDataSetChanged()。

还有其他方法吗?

0 投票
1 回答
18 浏览

android - ListAdapter 未填充应用程序第二个片段上的适配器

我有一个包含 2 个片段的应用程序,它们都有从同一个适配器填充的列表。

第一个工作正常,但第二个 -

根本不填充适配器。它只是不显示任何列表。

肯定缺少某些东西,因为我能够在第一个片段中正确填充我的适配器,但是来到这个片段时,列表不会弹出。

这是我的 ListAdapter 实现 -

和我的 ViewHolder 和模型 -

我错过了什么?刚从普通的 RecyclerView.Adapter 开始使用 ListAdapter。

0 投票
2 回答
1148 浏览

android - 使用 DiffUtil 和 AsyncListDiffer 更新 RecyclerView 不起作用

我正在创建一个RecyclerViewin FragmentusingDiffUtil并且AsyncListDiffer因为我不想使用notifyDataSetChanged()方法。但是我在使用这种方法时遇到了一个问题。我正在尝试从数据库中检索项目,但每次数据更改(增加)时,UI 都不会直接更新。我必须先关闭我的应用程序,然后再次打开它,或者去另一个班级检查更新的项目。

这是我的适配器:

片段中的代码:

我的模型:

我不知道为什么它不起作用,因为我之前尝试过使用DiffUtil并且AsyncListDiffer没有问题。任何帮助或建议都会很棒。提前致谢。

0 投票
0 回答
152 浏览

android - diffutil areContentsTheSame 函数只比较新项目

我在我的项目中使用 AsyncListDiffer,其中我在主页中有很多引号

下面是我在我的 recyclerview 适配器中编写的代码

当我更改引用对象中的某些内容时,我会将其提交给 ListDiffer。如您所见,我正在areContentsTheSame函数内记录 newItem 和 oldItem。这里两者oldItem都是newItem相同的对象(我的意思是它们的内容是我最近更新的那个),我认为 oldItem 应该给我旧的未更新项目,但它没有

(我已经尝试复制列表,然后提交不同的,它不起作用)

0 投票
0 回答
226 浏览

android-recyclerview - 为什么 Diffutil AsyncListDiffer 的 submitList 方法没有刷新我的 recyclerview?

我正在 recyclerview 中实现 recyclerview ,如下图所示,并使用 diffutil asynclistdiffer 来管理列表元素中的更改。

活动卡片列表

在下面添加片段和适配器的代码。

自定义事件片段代码:

CustomizeEventRecyclerAdapter 代码:

如附加的屏幕截图所示,当单击添加项目按钮时,另一个适配器被调用以设置选定项目的列表,我们也可以在单击“X”按钮时删除这些项目。SelectedItemsRecyclerAdapter 代码:

自定义事件视图模型代码:

问题描述: 在 CustomizeEventFragment 中,当对任何事件卡执行 Select cake、Add items 或 Remove selected Items 的操作时,然后在观察者内部我调用 CustomizeEventAdapters submitlist 方法并每次都传递更新的列表。因此,每当列表数据更改/更新时,都会调用观察者,但这会导致整个回收视图更新它的 UI,如 notifydatasetchanged。我认为这是因为我正在初始化观察者内部的 recyclerview 和适配器。

当假设我对第三个事件卡执行任何操作时,这会导致问题,然后在观察者因该更改而受到打击后,它会导致整个 recyclerview 更新其 UI 并且 recyclerview 中的项目从第一个初始位置显示。在 recyclerview 更新后,它应该保持在第 3 个事件卡位置。

我尝试在观察者之外删除以下 recyclerview 和适配器初始化代码

但是当我这样做时,仅在观察者内部调用 customizeEventRecyclerAdapter submitlist 方法不会检测/更新 recyclerview UI 以更改列表。Diffutil asynclistdiffer submitlist 方法应该处理更改,但我无法理解为什么它没有按预期工作。请指出我在片段/适配器代码或视图模型实现中犯的任何错误。

0 投票
0 回答
81 浏览

android-recyclerview - RecyclerView AsyncListDiffer 和数据源一致性状态丢失与 onClickListener

我有数据源(在那个例子中它只是一个 var myState: List)

我有 RecyclerView 和 AsyncListDiffer 连接到它

我将 OnClickListener 绑定到 RecyclerView 上的每个项目

该侦听器检查单击的项目是否存在于数据源中,如果不存在,则将其输出到控制台。每隔几秒钟,源中的数据就会发生变化,并通过 submitList 方法推送到 AsyncListDiffer,在某些情况下,它在内部使用其他线程匹配数据并将差异数据传递给 RecyclerView,这需要一些时间;如果我开始不停地单击项目,并且当差异插入新数据时同时发生单击事件,那么我将进入不一致状态。

那么,如何处理呢?

  1. 忽略数据不一致的点击?(缺点:用户可以看到一些奇怪的行为,如列表项没有折叠/展开,没有导航发生等)
  2. 尝试通过单独的字段(位置/等)在新数据中找到类似的项目,并使用它?(缺点:与1相同。但概率较小)
  3. 阻止 OnClickListener 事件,直到 Recycler 和数据源中的数据一致?(缺点:与上述相同,并且还滞后于用户执行的操作,直到数据再次变得一致)
  4. 还有什么?解决这个问题的最佳方法是什么?
0 投票
3 回答
169 浏览

android - Android使用AsyncListDiffer时如何对RecyclerView List进行排序?

我有一个显示 CardView 列表的 RecyclerView。我最近将项目从使用 RecyclerView 适配器切换到使用 AsyncListDiffer 适配器以利用后台线程上的适配器更新。我已经转换了列表的所有以前的 CRUD 和过滤方法,但无法使排序方法正常工作。

我有不同类型或类别的 CardView,我想按类型/类别进行排序。我克隆了现有列表 mCards,因此“幕后”DiffUtil 将其视为与我想要排序的现有列表不同的列表。然后我使用 AsynListDiffer 的 submitList()。

该列表未排序。我在这里想念什么?

主要活动:

AsyncListDifferAdapter:

模型: