如何避免选定的列表项移到列表顶部?

时间:2018-03-01 15:31:43

标签: android android-recyclerview scrolltop

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

谢谢, K. Rajesh

1 个答案:

答案 0 :(得分:1)

如果您使用的是向上和向下控制,则与ViewHolder的实际RecyclerView分开,您可以使用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)
        }
    }

另请注意,如果您将ItemDecoration添加到RecyclerView,则需要在执行滚动时考虑这些额外的间距。