【发布时间】:2020-01-12 12:36:50
【问题描述】:
在使用 ListAdapter 时,我注意到在更新项目后 DiffUtil.ItemCallback areContentsTheSame() 方法总是返回 true。调试代码我发现旧的和新的项目是完全一样的(旧的状态消失了)。因此,ListAdapter onBindViewHolder() 方法没有被调用来更新列表中的相应行(只有项目的顺序随着漂亮的动画而改变)。
查看 Stackoverflow 上的其他问题似乎是许多开发人员面临的常见问题:
ListAdapter not updating item in reyclerview
ListAdapter not updating when editing content
DiffUtil.Callback not working as expected
Items in Recyclerview + Listadapter won't redraw on update
ListAdapter with DiffUtil.ItemCallback always considers objects the same
但是,上述答案(如果有的话)都没有提供正确的解决方案。
它对我有用的唯一方法是每次观察者发出新结果时在 ListAdapter 上调用 notifyDataSetChanged()。
但是,如果通过强制 RecyclerView 重绘其内容(它拥有的所有项目)而放弃了您可以获得的所有出色性能,那么使用 ListAdapter 和 submitList() 通知更改的全部意义是什么?显示到目前为止)?
-
notifyDataSetChanged():
即使它有效,但如果您决定首先使用 ListAdapter,肯定不是正确的方法。
-
viewModel.getObjects().observe(this, listOfObjects -> listAdapter.submitList(new ArrayList<>(listOfObjects)));:
没用。
更新列表中的项目后,我希望看到 UI 上相应行发生的相应更改(不仅是排序顺序)。
【问题讨论】:
-
同样的问题,你找到解决办法了吗?
-
@Nux 不幸的是还没有。
-
@fmiralles 怎么样了?面临同样的问题((
-
你是如何更新你的对象的?你能分享你的代码吗
标签: android android-recyclerview listadapter android-diffutils