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
相关产品推荐
相关产品推荐

