我目前正在使用回收站视图的hasStableIds
,并且有以下发现:
1)当hasStableIds = false
:
notifyDataSetChanged()
,它将使所有视图都变脏并再次回收它们,因此将为每个项目调用onCreateViewHolder()
和onBindViewHolder()
。2)当hasStableIds = true
:
notifyDataSetChanged()
,它将检查ID,然后决定是否为recyclerView项创建viewHolder。如果数据集未更改,则它将仅再次调用onBindViewHolder()
,而不会再次调用onCreateViewHolder()
。因此,根据上述行为,我感到困惑的是,我们是否应该始终将我们的recyclerview与hasStableIds = true
一起使用,以便避免再次创建视图持有人?还是有任何特定条件要使用它?
根据文档
启用适配器发布一个唯一的ID /值,该ID /值可以用作recyclerView中给定位置的项的键。
如果该项目重新放置在数据集中,则该项目返回的ID应该相同。
这可以避免适配器通知更改或执行任何位置操作时突然闪烁,
警告!,除非您知道列表项/内容在更新期间不会更改,否则不建议这样做。