什么时候为 recyclerView 使用 hasStableIds true?
Posted
技术标签:
【中文标题】什么时候为 recyclerView 使用 hasStableIds true?【英文标题】:When to use hasStableIds true for the recyclerView? 【发布时间】:2019-10-18 22:34:44 【问题描述】:我目前正在使用回收站视图的hasStableIds
,我有以下观察结果:
1) 当hasStableIds = false
:
notifyDataSetChanged()
,它会将所有视图变为脏视图并再次回收它们,因此将为每个项目调用onCreateViewHolder()
和onBindViewHolder()
。
2) 当hasStableIds = true
:
notifyDataSetChanged()
被调用,它将检查id,然后决定是否为recyclerView项目创建一个viewHolder。如果数据集没有改变,那么它只会再次调用onBindViewHolder()
而不是onCreateViewHolder()
。
因此,根据上述行为,我很困惑我们是否应该始终将我们的 recyclerview 与hasStableIds = true
一起使用,以避免再次创建视图持有者?或者有什么具体的条件可以使用吗?
【问题讨论】:
【参考方案1】:根据文档
Enables adapter publishes a unique Id/value that can act as a key for the item at a given position in recyclerView.
如果该项目在数据集中重新定位,则为该项目返回的 ID 应该相同。 这使您可以避免在适配器通知更改或执行任何位置操作时突然闪烁,
注意!,除非您知道列表项/内容在更新期间不会更改,否则不建议这样做。
android hasStableIds
【讨论】:
【参考方案2】:如果您存储在适配器的 dataList 状态以动态显示在 UI 中,您应该将 hasStableIds 设置为 true
。它可以帮助您更改列表,例如使用过滤器。
【讨论】:
以上是关于什么时候为 recyclerView 使用 hasStableIds true?的主要内容,如果未能解决你的问题,请参考以下文章
当actionmode打开时,RecyclerView子项不会单击
如何知道何时显示布局中的特定视图在RecyclerView中
ScrollView嵌套Recyclerview显示不全问题