在notify*
本身的RecyclerView.Adapter
和scrollToPosition
(和smoothScrollToPosition
)RecyclerView
方法之间是否存在竞争条件?如果是这样,我如何强制scroll
在notify
应用后严格执行?
更详细一点:我有一个带有适配器的RecyclerView
,该适配器经常使用新项目进行更新(可能与以前的项目重叠也可能不重叠)。此外,每当我设置新项目时,我也想将滚动位置设置为特定项目。为此,我首先更新Adapter
内的项目,然后滚动RecyclerView
。
然而,在此过程之后,滚动位置通常会出错。此外,如果我在不更改数据的情况下发出另一个smoothScrollToPosition
命令,则滚动很奇怪:它有时会走错方向等。在第二次滚动之后,位置总是正确的。因此,第一次看起来出现了问题,RecyclerView会在第二次滚动时捕获并纠正错误。
此外,当我使用notifyDataSetChanged
时使用DiffUtil
时,错误会略有不同。
现在我在this response by Yigit中读到notify*
基本上是异步的,所以我想它们和后续scrollToPosition
之间可能存在竞争条件 - 这是正确的吗?
最后我该怎么做才能建立一个严格的排序,这样只有在通过notify触发的所有ViewHolder更新完成后才会调用滚动?