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

RecyclerView onBindViewHolder中绑定点击事件的写法是否正确?idGroup需重新获取吗?

RecyclerView点击事件写法答疑

问题1:这种写法是否正确?

是正确的。之前直接用onBindViewHolder里的position绑定点击事件容易踩坑——RecyclerView的列表项会复用,position是临时值,当列表滑动、增删条目后,之前捕获的position会失效,导致点击对应到错误的条目。而通过ViewHolder作为参数,在点击事件里调用holder.getAdapterPosition(),能拿到当前条目实时的正确位置,完美规避这个问题。
不过要额外注意:调用getAdapterPosition()后要先判断返回值是不是RecyclerView.NO_POSITION,避免条目已经被移除时出现空指针或逻辑错误。

问题2:onBindViewHolder中已获取idGroup,是否需要在点击函数内重新获取?

分两种场景判断:

  • 如果你的数据源在用户点击前不会发生变化,或者你可以在onBindViewHolder时把idGroup直接存到ViewHolder的成员变量里(比如给自定义ViewHolder加个long idGroup字段,绑定的时候赋值),那完全不用重新获取,直接用ViewHolder里存好的idGroup就行,更高效。
  • 如果数据源可能在用户点击前被更新(比如后台同步了新数据,触发了列表刷新),那最好通过holder.getAdapterPosition()从最新的数据源里重新获取idGroup,这样能保证拿到的是当前条目的最新数据,避免因为数据更新导致的旧值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:55:30