当我们将ListAdapter
或RecyclerView.Adapter
与AsyncListDiffer
一起使用时,在调用submitList()
之后我们会遇到奇怪的行为-RecyclerView滚动到更改其位置的项目。
让我在示例中进行解释。
列表中有5个项目:A,B,C,D,E。用户刚刚打开了屏幕,只有A,B和C可见。现在由于一些交互作用,A项被移到了最后一个位置,所以我们当前的顺序是B,C,D,E,A。
// After init
adapter.submitList(listOf("A", "B", "C", "D", "E")
// After some interaction
adapter.submitList(listOf("B", "C", "D", "E", "A")
现在很奇怪,ReyclerView
滚动到列表的底部。但是它仅在第一个可见项更改其位置时适用。当例如我们将顺序更改为A,C,D,E,B,RecyclerView
未滚动。
我认为这可能与this issue有关,因为不同之处可能称为notifyItemMoved。不幸的是,在这种情况下,我们无法使用notifySomething
方法进行操作,因此不适用于此问题。