我有一个包含 50 个项目的 RecyclerView。我将使用 Remote 向上和向下按钮一一导航。要选择任何项目(例如第 25 个),我正在使用 recyclerview.scrollToPosition(position)
方法。选择后,项目会自动移动到列表的顶部位置。我不希望我选择的项目排在首位。我想成为相同的选定位置。我如何实现这一目标?
谢谢, K.拉杰什
最佳答案
如果您使用的是向上和向下控件,它们完全独立于 RecyclerView
的实际 ViewHolder
,您可以只使用 RecyclerView。滚动(x,y)
。
假设您的所有商品尺寸相同,您甚至不必考虑“所选商品”索引,因为商品高度不可能发生变化。只需在第一个位置使用 View ,然后在每次向上或向下按钮单击时滚动正高度或负高度。
如果您使用 LinearLayoutManager
或 GridLayoutManager
,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)
}
}
另外,请注意,如果您将 ItemDecoration
添加到您的 RecyclerView
,则在滚动时需要考虑这些额外的间距。
关于android - 如何避免选定的列表项移动到列表顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053135/