youth5201314 / banner

🔥🔥🔥Banner 2.0 来了!Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义。
Apache License 2.0
12.92k stars 2.51k forks source link

Banner放在MotionLayout中做动画的时候调用notifyItemChanged不响应onBindViewHolder事件 #1230

Open SwordSware opened 5 months ago

SwordSware commented 5 months ago

Banner放在MotionLayout中做动画,MotionLayout对应的layoutDescription:motion scene文件操作包裹Banner的Constraint开始结束设置关键属性visibility,最容易复现,基本是百分之百复现 复现之后,滑动一下Banner(也就是滑动一下RecyclerView)之后,onBindViewHolder方法才会被调用 如果Banner用RecyclerView代替,操作后再调用notifyItemChanged其onBindViewHolder可以被正常调用 [为此我做了一个demo来对比两者的不同表现(其中的item操作事件放在了onBindViewHolder方法中,是因为在onCreateViewHolder中获取postion也有问题,有时候会返回-1,而且正常情况也会返回错误,比如holder.getBindingAdapterPosition(),故放在onBindViewHolder) IMG_20240618_102609

MotionLayoutBannerTestApplication.zip

jklwan commented 1 month ago

notifyItemChanged的position不对,需要用holder的position,onBindView返回的position是数据的position不是holder的position,而且需要注意的是对于头尾两个数据需要刷新两个item。 例如3条数据对应的item的数据是五条:2,0,1,2,0,此时点击第一个0刷新时,notifyItemChanged的position是1而不是0,而且要刷新两个position(1和4)。