【问题标题】:When to use hasStableIds true for the recyclerView?什么时候为 recyclerView 使用 hasStableIds true?
【发布时间】: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 一起使用,以避免再次创建视图持有者?或者有什么具体的条件可以使用吗?

【问题讨论】:

    标签: android android-recyclerview


    【解决方案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。它可以帮助您更改列表,例如使用过滤器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        相关资源
        最近更新 更多