recycleview的onbindview触发机制有问题

秋名山第一码神 2017-11-13 04:23:42
只有item可见的时候才会触发,例如一个水平的recycleview,如果不滑动,后面的onbind都不会调用
这样可以减少开销,但是在快速删除item的时候,假如我给item设置了点击事件,那么由于onbind没有调用,position没有更新,
这时候会发生数组越界,难道这就是recycleview没有item点击回调的原因吗?因为回调的postion有可能超过元素个数
...全文
577 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jklwan 2017-11-28
  • 打赏
  • 举报
回复
调用快速删除后要自己刷新adapter,使用notifyItemMoved
  • 打赏
  • 举报
回复
引用 3 楼 moonFY 的回复:
一般点击 Item 进行跳转等不涉及 RecyclerView 数据变化的操作时,Position 和 getAdapterPosition() 是没什么区别的, 当涉及RecyclerView 数据变化时,使用getAdapterPosition() 代替 onBindViewHolder() 方法的 position。 因为 getAdapterPosition 获得的 position 是最新的 position。而 onBindViewHolder 方法的position 并不是最新的 position。
看他的源码确实是这样呢,会根据增删计算新的position,但还是不行
  • 打赏
  • 举报
回复
引用 2 楼 jklwan 的回复:
不要用position,用ViewHolder.getAdapterPosition()
实测不行 估计holder也是在显示的时候刷新
雨焰 2017-11-16
  • 打赏
  • 举报
回复
你去操作的时候,表示已经可见了,可见了那么onbinder应该已经可以触发!代码是不是需要再优化优化?
moonFY 2017-11-16
  • 打赏
  • 举报
回复
一般点击 Item 进行跳转等不涉及 RecyclerView 数据变化的操作时,Position 和 getAdapterPosition() 是没什么区别的, 当涉及RecyclerView 数据变化时,使用getAdapterPosition() 代替 onBindViewHolder() 方法的 position。 因为 getAdapterPosition 获得的 position 是最新的 position。而 onBindViewHolder 方法的position 并不是最新的 position。
jklwan 2017-11-16
  • 打赏
  • 举报
回复
不要用position,用ViewHolder.getAdapterPosition()

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧