【问题标题】:How to avoid selected list item moving to top of the list?如何避免选定的列表项移动到列表顶部?
【发布时间】:2018-03-01 15:31:43
【问题描述】:

我有 RecyclerView,其中包含 50 个项目。我将使用遥控器的向上和向下按钮一一导航。要选择任何项目(例如 25 日),我正在使用 recyclerview.scrollToPosition(position) 方法。在此选择之后,项目会自动移动到列表的顶部位置。我不希望我选择的项目位居榜首。我想成为相同的选定位置。我如何实现这一目标?

谢谢, K.拉杰什

【问题讨论】:

  • 请分享您的代码
  • 你所有的商品都是一样的尺寸还是可变的?
  • @Submersed 是的,我的列表项中只有一个文本字段。

标签: android android-recyclerview scrolltop


【解决方案1】:

如果您使用的是与RecyclerView 的实际ViewHolders 完全分开的向上和向下控件,您可以只使用RecyclerView.scrollBy(x, y)

假设您的所有商品尺寸相同,您甚至不必考虑“选定商品”索引,因为商品高度不可能发生变化。只需在第一个位置使用 View 并在每次向上或向下按钮单击时滚动正高度或负高度。

如果您使用 LinearLayoutManagerGridLayoutManager,Kotlin 中的部分示例将如下所示:

    view.findViewById<Button>(R.id.up).setOnClickListener {
        val temp = recyclerView.layoutManager.findViewByPosition((recyclerView.layoutManager as LinearLayoutManager).findFirstCompletelyVisibleItemPosition())
        temp?.let {
            recyclerView?.scrollBy(0, -it.height)
        }
    }

    view.findViewById<Button>(R.id.down).setOnClickListener {
        val temp = recyclerView.layoutManager.findViewByPosition((recyclerView.layoutManager as LinearLayoutManager).findFirstCompletelyVisibleItemPosition())
        temp?.let {
            recyclerView?.scrollBy(0, it.height)
        }
    }

另外,请注意,如果您在 RecyclerView 中添加了 ItemDecorations,则在滚动时需要考虑这些额外的间距。

【讨论】:

  • 这不起作用。如果我使用 smoothScrollToPosition(position) 它会滚动并将第 20 个项目移动到第一个可见项目。但我不想要这个移动。如何解决这个问题。
  • 我的答案不包括使用滚动到某个位置的解决方案,它只是使用滚动...
猜你喜欢
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2010-12-12
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多