【发布时间】:2019-11-21 05:46:52
【问题描述】:
我可以看到设置适配器。
setHasStableIds(true);
将提高 RecyclerView 的性能,因为它提高了很多性能,为什么 RecyclerView 中没有默认启用它,设置 setHasStableIds(true) 时有什么限制吗?
【问题讨论】:
标签: android performance android-recyclerview
我可以看到设置适配器。
setHasStableIds(true);
将提高 RecyclerView 的性能,因为它提高了很多性能,为什么 RecyclerView 中没有默认启用它,设置 setHasStableIds(true) 时有什么限制吗?
【问题讨论】:
标签: android performance android-recyclerview
之所以不是默认值,是因为支持适配器的数据可能没有稳定的 Id,而 RecyclerView 不知道这一点。
是的,使用 setHasStableIds(true) 有一个限制 - 您的数据必须具有稳定的 ID
您要么需要覆盖 getItemId(int position) 以返回代表每个数据项的唯一 ID,如果您想不出更好的方法,只需返回 HashCode。
或者
如果使用 CursorAdapter 之类的东西,这个自动具有稳定的 ID,因为它使用数据库表 _id 列。
【讨论】:
原因是当我们只在回收视图中显示数据时,不需要每个项目的唯一 ID,也不需要动画。所以它默认为 false。
但是当我们要在数据集中执行一些操作并更新回收器视图时,它需要特定项目的唯一 ID 和刷新动画(闪烁)它需要。所以我们设置为 true
【讨论】: