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

标签 android android-recyclerview scrolltop

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

谢谢, K.拉杰什

最佳答案

如果您使用的是向上和向下控件,它们完全独立于 RecyclerView 的实际 ViewHolder,您可以只使用 RecyclerView。滚动(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,则在滚动时需要考虑这些额外的间距。

关于android - 如何避免选定的列表项移动到列表顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053135/

相关文章:

javascript - div.scrollTop 不在代码中工作,在控制台中工作

android - 在 Android Chrome 浏览器中向上滚动时防止粘性页脚向上移动

android - 如何在android中为facebook sdk添加注销回调

android - RecyclerView ViewHolders 中的许多 CountDownTimer 出错

android - 如何在单击 Activity 类中的按钮时过滤适配器微调器上的列表

jquery - jQuery offset()top 返回不同值的跨浏览器问题

javascript - 如何设置多个动态div的scrollTop()

android - android 使用软键盘打字时的 touchEvent

android - 为 Android 构建 Chrome

java - 什么是 RecyclerView.Adapter<MyAdapter.MyViewHolder> 以及它与 Android 中的 RecyclerView.Adapter 有何不同?