You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin 如何通过传入id获取RecyclerView对应位置并滚动

实现方案

你需要基于Adapter绑定的replies数据集做遍历匹配,找到目标id对应的索引位置后再执行滚动操作,具体步骤如下:

  • 第一步:确认你的RecyclerView.Adapter持有和当前渲染完全一致的replies列表,每个Reply实例的id字段可正常读取。
  • 第二步:实现位置匹配方法,示例代码如下:
// Kotlin 示例,Reply为你自定义的回复实体类,按需替换即可
fun findTargetPosition(targetId: Long, replyList: List<Reply>): Int {
    replyList.forEachIndexed { index, reply ->
        if (reply.id == targetId) {
            return index
        }
    }
    // 未匹配到对应条目时返回无效位置
    return RecyclerView.NO_POSITION
}
// Java 示例
public int findTargetPosition(long targetId, List<Reply> replyList) {
    for (int i = 0; i < replyList.size(); i++) {
        if (replyList.get(i).getId() == targetId) {
            return i;
        }
    }
    return RecyclerView.NO_POSITION;
}
  • 第三步:校验位置有效性后执行滚动
val targetPos = findTargetPosition(传入的目标id, adapter.getReplyList())
if (targetPos != RecyclerView.NO_POSITION) {
    // 直接跳转至对应位置
    recyclerView.scrollToPosition(targetPos)
    // 若需要平滑滚动效果替换为下方方法
    // recyclerView.smoothScrollToPosition(targetPos)
}

注意事项

  • 所有查找和滚动操作必须在数据集更新、Adapter调用完notifyDataSetChanged等刷新方法之后执行,否则会出现位置和数据不匹配的问题
  • 若你的RecyclerView开启了分页加载,需要先确认目标id对应的Reply已经加载到当前绑定的数据集中,否则会匹配不到位置
  • 如果你需要控制目标item滚动后的偏移位置(比如固定在顶部),可以配合LayoutManager的对应方法实现,示例:
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
// 第二个参数是距离顶部的偏移量,单位为px
layoutManager.scrollToPositionWithOffset(targetPos, 0)

内容的提问来源于stack exchange,提问作者rugarug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:18:03