嵌套回收器视图滚动偏移

问题描述 投票:0回答:1

我有垂直回收器视图,旁边是带有嵌套垂直回收器视图的水平回收器视图。 (第一个垂直方向可能没有密切关系。) 我将它们全部设置为与此类以相同的偏移量滚动。

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()

android kotlin scroll nestedrecyclerview
1个回答
0
投票

为了它的价值,我必须将偏移量设置为我知道在 onBindViewHolder 中设置的偏移量。知道第一个是我一直想要设置的那个,我添加了

myLayoutManager.scrollToPositionWithOffset(0,-1*recyclerViewSyncHelper.getVerticalRecyclerViews()[0].computeVerticalScrollOffset())
在将其添加到回收者视图列表之前。如果这对将来的任何人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.