Android 当 child 元素为 expanded/collapsed 时,RecyclerView 滚动到顶部

Android RecyclerView scrolls to top when child element is expanded/collapsed

我在回收站视图中有一个元素列表,这些元素是使用数据绑定动态生成的。每个元素都有一个底部视图,最初设置为 View.GONE,但是一旦用户单击该元素并且视图展开,回收器视图会自动滚动回列表顶部。相反,如果展开视图然后再次单击折叠,回收器视图将再次滚动到列表顶部。我尝试跟踪适配器元素的 ID(再次使用数据绑定),在展开或折叠时将焦点设置到 child 元素,并使用绑定适配器为 expand/collapse 本身设置动画.

我怀疑当 child 之一的高度发生变化时,回收器视图中的适配器正在接收 onNotifyDataChanged() 警报,渲染另一个视图(仍在 children,而不是列表中单独的 child),并自动滚动到顶部。有没有办法覆盖这个?有谁知道当单击其中一个元素时,还有什么可能导致列表吸附到顶部 -> expanded/collapsed?

所以我找到了解决我的问题的方法,以防有人遇到类似的情况。我实际上最终找到了这个答案:RecyclerView notifyDataSetChanged scrolls to top position

涉及交错布局管理器的第二个解决方案是我选择的路线,因为我希望能够包装内容。我的怀疑是正确的,它与回收站视图中元素的高度变化有关。可扩展项的父包装内容,因此一旦可扩展部分 appeared/disappeared(至少我从中得到的是这样),回收器视图就被迫重新计算项目的大小。