我有垂直回收器视图,旁边是带有嵌套垂直回收器视图的水平回收器视图。 (第一个垂直方向可能没有密切关系。) 我将它们全部设置为与此类以相同的偏移量滚动。
class RecyclerViewSyncHelper() {
private var absoluteOffset: Int = 0
private val verticalRecyclerViews = mutableListOf<RecyclerView>()
fun getAbsoluteOffset(): Int? { return absoluteOffset }
fun addVerticalRecyclerView(recyclerView: RecyclerView) {
recyclerView.clearOnScrollListeners()
recyclerView.addOnScrollListener(onScroll)
verticalRecyclerViews.add(recyclerView)
matchOffset(verticalRecyclerViews[0].computeVerticalScrollOffset())
}
fun removeVerticalRecyclerView(recyclerView: RecyclerView) {
verticalRecyclerViews.remove(recyclerView)
}
var onScroll = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
val value = recyclerView.computeVerticalScrollOffset()
if(value != 0) matchOffset(value)
}
}
fun matchOffset(offset: Int? = absoluteOffset) {
offset?.let { offsetValue ->
verticalRecyclerViews.forEach { recyclerView ->
val currentOffset = recyclerView.computeVerticalScrollOffset()
if (offsetValue != currentOffset) {
recyclerView.scrollBy(0, offsetValue-currentOffset)
}
}
}
}
}
所以现在一切都以相同的速度滚动。凉爽的!但!!!!一旦填充了新的嵌套垂直回收器视图,它的偏移量就是 0,直到它完全显示在屏幕上。
我在onCreateViewHolder和onBind中尝试过holder.detailsRecyclerView.scrollBy(0, 0-recyclerViewSyncHelper.getVerticalRecyclerViews()[0].computeVerticalScrollOffset())。还是不行。`class RecyclerViewSyncHelper() { private varabsoluteOffset: Int = 0 private valverticalRecyclerViews = mutableListOf()
为了它的价值,我必须将偏移量设置为我知道在 onBindViewHolder 中设置的偏移量。知道第一个是我一直想要设置的那个,我添加了
myLayoutManager.scrollToPositionWithOffset(0,-1*recyclerViewSyncHelper.getVerticalRecyclerViews()[0].computeVerticalScrollOffset())
在将其添加到回收者视图列表之前。如果这对将来的任何人有帮助。