donkingliang / GroupedRecyclerViewAdapter

GroupedRecyclerViewAdapter可以很方便的实现RecyclerView的分组显示,并且每个组都可以包含组头、组尾和子项;可以方便实现多种Type类型的列表,可以实现如QQ联系人的列表一样的列表展开收起功能,还可以实现头部悬浮吸顶功能等。
Apache License 2.0
1.65k stars 216 forks source link

请问下,删除数据后是否需要使用类似notifyItemRangeChanged的方法 通知其后数据刷新,修正数据postion? #72

Closed w296365959 closed 3 years ago

w296365959 commented 3 years ago

notifyChildRemoved删除数据后 其后对应的position是否会更新,是否需要notifyChildChanged等方法重新bind修正其后position?

w296365959 commented 3 years ago

内部使用的点击事件使用了 getLayoutPosition,我连续点击同一个item,点击事件是删除当前条目,会删除本条目和他的上一个条目,由于adapter和layout的位置会有时间差(<16ms),进行第二次单击的时候RecyclerView控件的动画刷新还没有完成,第二次点击的其实还是本条目的容器, 使用getAdapterPosition是否更好,判断getAdapterPosition<0时return 防止数组越界

donkingliang commented 3 years ago

关于第一个问题:notifyChildRemoved删除数据后,可以notifyChildChanged等方法重新bind修正其后position。但这不是必要,要不要修正,取决于你是否在onBindxxxHolder方法使用了final position,需要及时修正。

关于第二个问题:getLayoutPosition返回的是与用户所见的布局一致的位置,如果快速点击,页面没有刷新完成时,用户点击的就是同一个item,所以在点击中使用getLayoutPosition是合理的。至于你的问题,可以通过防止连续点击来避免。